python - 将一列中的字典列表转换为同一数据框中的多列

标签 python pandas

我的数据框有一列包含字典列表。我如何将其转换为扩展数据框?数据框如图所示。

A       B       C
123    abc    [{"name":"john"},{"age":"28"},{"salary":"50000"}]
345    bcd    [{"name":"alex"},{"age":"38"},{"salary":"40000"}]
567    xyx    [{"name":"Dave"},{"age":"82"},{"salary":"30000"}]

我尝试了以下方法

> df1=pd.concat([pd.DataFrame(x) for x
> indf['C']],keys=df['A']).reset_index(level=1, drop=True).reset_index()

最终输出如下

A       B        name   salary   age
123    abc       john    50000   28
345    bcd       alex    40000   38
567    xyx       Dave    30000   82

最佳答案

IIUC,将 dictlist 扁平化为一个 dict,然后我们使用 dataframe 构造函数,只需要 concat 回到原来的 df

from itertools import chain
s=pd.DataFrame([dict(chain(*map(dict.items,x))) for x in df.pop('C').tolist()],index=df.index)
s
  age  name salary
0  28  john  50000
1  38  alex  40000
2  82  Dave  30000
s=pd.concat([df,s],1)
s
     A    B age  name salary
0  123  abc  28  john  50000
1  345  bcd  38  alex  40000
2  567  xyx  82  Dave  30000

数据输入:

df.to_dict()
{'A': {0: 123, 1: 345, 2: 567}, 'B': {0: 'abc', 1: 'bcd', 2: 'xyx'}, 'C': {0: [{'name': 'john'}, {'age': '28'}, {'salary': '50000'}], 1: [{'name': 'alex'}, {'age': '38'}, {'salary': '40000'}], 2: [{'name': 'Dave'}, {'age': '82'}, {'salary': '30000'}]}}

关于python - 将一列中的字典列表转换为同一数据框中的多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54282502/

相关文章:

python - 使用 scipy 进行二维插值/平滑线时如何提高性能?

python - Django 中的一对多关系

if-statement - 在 pandas 中使用 If/Truth 语句

python - 数据帧 : Get the top n value of each type

python - 如何将我所有的 django 应用程序保存在特定文件夹中

python - 当其中一些软件包是通过 sudo pip3 安装的,而其他软件包不是通过 pip 安装时,如何删除所有由 pip 安装的软件包

Python:如何使用 matplotlib 将图像像素投影到 map 上

python - 如何在 Pandas 的数据透视表中搜索数据?

python - 将 Timeseries 的索引从 datetime64[ns] 转换为 datetime64[s] 而不会丢失信息

python - 如何按月创建最小-最大线图