python - 基于列中嵌套的 JSON 添加 DataFrame 列

标签 python json python-3.x pandas dataframe

我有以下 Pandas Dataframe(名为 dx):

                                    _id  user_type
0  {'$oid': '5b9058462f38434ab0d85cd3'}          1
1  {'$oid': '5b9058462f38434ab0d85ce9'}          1
2  {'$oid': '5b9058462f38434ab0d85ced'}          1
3  {'$oid': '5b9058462f38434ab0d85cee'}          1
4  {'$oid': '5b9058462f38434ab0d85cef'}          1

它来自一个大型 JSON(比本示例多或少 500.000 行和更多列),如您所见 _id 包含嵌套 JSON。

对于此示例,我的目标是获取一个名为 oid 的新列,其 oid 代码:

                                    _id  user_type                       oid
0  {'$oid': '5b9058462f38434ab0d85cd3'}          1  5b9058462f38434ab0d85cd3
1  {'$oid': '5b9058462f38434ab0d85ce9'}          1  5b9058462f38434ab0d85ce9
2  {'$oid': '5b9058462f38434ab0d85ced'}          1  5b9058462f38434ab0d85ced
3  {'$oid': '5b9058462f38434ab0d85cee'}          1  5b9058462f38434ab0d85cee
4  {'$oid': '5b9058462f38434ab0d85cef'}          1  5b9058462f38434ab0d85cef

我使用以下代码片段获得了结果:

dx['oid']=None
for i in dx.index:
     dx['oid'][i]=dx.at[i,'_id']['$oid']

这给了我我正在寻找的东西,但是速度非常非常慢。填充示例的列需要 3-4 分钟,该列只有 5 行!

如何优化基于其他具有 JSON 值的列的新列的创建?

我无法使用正则表达式,因为嵌套 JSON 比示例中的核心复杂。

最佳答案

这是object列类型,其中在单元格内包含单个dict,因此

df['$oid']=df['_id'].map(lambda x : x['$oid'])

或者

s=df['_id'].apply(pd.Series)
s
#df=pd.concat([df,s],axis=1)
Out[601]: 
                       $oid
0  5b9058462f38434ab0d85cd3
1  5b9058462f38434ab0d85ce9
2  5b9058462f38434ab0d85ced
3  5b9058462f38434ab0d85cee
4  5b9058462f38434ab0d85cef

关于python - 基于列中嵌套的 JSON 添加 DataFrame 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53951554/

相关文章:

python - "a bytes-like object is required",但 type(var) 返回 <class 'bytes' >

python - Python IDLE 中的反向制表符 (3.7)

python - 如何在 Python 中运行后台计时器

python - pip线程安全吗?

javascript - 我如何检查 json 响应是否具有带有 switch case 的自己的属性?

javascript - 如何获取对象长度

python-3.x - 管道到ffmpeg时如何在python3中使用stdout.write?

python - 在 pandas 中进行透视后重置索引而无需多个 header

python - 在 Python 中索引浮点值

jquery - 通过 jQuery 将 JSON 数据发布到 ASP .NET MVC 4 Controller 操作