python - 将 DataFrame 中的嵌入字典列表展开为 DataFrame 的新列

标签 python python-3.x pandas dataframe pandas-explode

我有一只 Pandas DataFrame看起来像:

import pandas as pd
print(pd.__version__)

df0 = pd.DataFrame([
 [12, None, [{'dst': '925', 'object': 'Lok. Certification', 'admin': 'valid'},
             {'dst': '935', 'object': 'Lok. Administration', 'admin': 'true'},
             {'dst': '944', 'object': 'Lok. Customer', 'admin': 'false'},
             {'dst': '945', 'object': 'Lok. Customer', 'admin': 'false'},
             {'dst': '954', 'object': 'Lok. Certification-C', 'admin': 'invalid'},
             {'dst': '956', 'object': 'Lok. Certification', 'admin': 'valid'}]],
 [13,'wXB', [{'dst': '986', 'object': 'Fral_heater', 'admin': 'valid'},
             {'dst': '987', 'object': 'Fral_cond.', 'admin': 'valid'}]],
 ])

第 2 列中的每个列表都具有完全相同的键(dstobjectadmin)。

df0 的每一行可以有 0(空 [])到 100 个列表。

我希望我可以扩展 df0 DataFrame 看起来像这样:

columns = ['id', 'name', 'dst', 'object', 'admin']

df_wanted
Out[416]: 
     id name  dst  object                admin
    12  None  925 'Lok. Certification'   'valid'
    12  None  935 'Lok. Administration'  'true'
    12  None  944 'Lok. Customer'        'false'
    12  None  945 'Lok. Customer'        'false'
    12  None  955 'Lok. Certification-C' 'invalid'
    12  None  956 'Lok. Certification'   'valid'
    13   wXB  987 'Lok. Fral_heater'     'valid'
    13   wXB  986 'Lok. Fral_cond.'      'valid'
    ...

请注意,前两列 idname 沿行复制以适应其列表中的元素数量。

(dst 列必须在最后使用 .astype(int) 强制转换为 int。)

我怎样才能做到这一点?

信息:

Python 3.10.4
pd.__version__
'1.4.2'

最佳答案

您可以先explode列,然后将字典转换为列:

df0 = df0.explode(2, ignore_index=True)    
df0 = pd.concat([df0, df0[2].apply(pd.Series)], axis=1).drop(columns=2)

关于python - 将 DataFrame 中的嵌入字典列表展开为 DataFrame 的新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72163253/

相关文章:

python-3.x - 如何在 tensorflow 中使用 python3 预测 LSTM 模型中的情绪?

python-3.x - 在 pandas 数据框中的行之间添加随机数据

python - 将 3 个不同的 For 循环的结果显示到表中

python - “zsh: illegal hardware instruction python” 在 macbook pro M1 上使用 Tensorflow

python - 如何用一行代码解释filter和lambda的功能?

python - 将 Windows Linux 子系统 bash 与 VS Code 结合使用时出现 "No such file or directory"

Python Pandas : How can I count the number of times a value appears in a column based upon another column?

python - 如何使用子进程和 'cat'逐行读入数据?

python - 如何将4位数字转换为小时 :minutes time format in pandas

python - 使用 tf.GradientTape() 训练逻辑回归无法收敛