我想将Pandas DataFrame df内的字典的值提取到该DataFrame的新列中.引用字典中的所有键在所有行中都是相同的.

import pandas as pd

df = pd.DataFrame({'a': [1, 2, 3], 'b': [{'x':[101], 'y': [102], 'z': [103]}, {'x':[201], 'y': [202], 'z': [203]}, {'x':[301], 'y': [302], 'z': [303]}]})

enter image description here

dfResult = pd.DataFrame({'a': [1, 2, 3],  'x':[101, 201, 301], 'y': [102, 202, 302], 'z': [103, 203, 303]})

enter image description here

我尽我所能从DICT中获得键和值,但我不知道如何用它们制作新的专栏:

df.b.apply(lambda x: [x[y] for y in x.keys()])

0    [[101], [102], [103]]
1    [[201], [202], [203]]
2    [[301], [302], [303]]


df.b.apply(lambda x: [y for y in x.keys()])

0    [x, y, z]
1    [x, y, z]
2    [x, y, z]


推荐答案

如果始终有一个元素列表是可能的,则使用带有字典理解的嵌套列表并传递给DataFrame个构造函数:

df = df.join(pd.DataFrame([{k: v[0] for k, v in x.items()} for x in df.pop('b')],
                           index=df.index))
print (df)
   a    x    y    z
0  1  101  102  103
1  2  201  202  203
2  3  301  302  303

另一个 idea 是为字典理解中的每一行创建DataFrame,并按concat连接:

df = df.join(pd.concat({k: pd.DataFrame(v) for k, v in df.pop('b').items()}).droplevel(1))
print (df)
   a    x    y    z
0  1  101  102  103
1  2  201  202  203
2  3  301  302  303

Python相关问答推荐

使用Python从HTTP打印值

将numpy矩阵映射到字符串矩阵

无法使用python.h文件; Python嵌入错误

Google Drive API获取文件计量数据

Python plt.text中重叠,包adjust_text不起作用,如何修复?

在Python和matlab中显示不同 colored颜色 的图像

仅从风格中获取 colored颜色 循环

acme错误-Veritas错误:模块收件箱没有属性linear_util'

运行Python脚本时,用作命令行参数的SON文本

在极性中创建条件累积和

有没有一种ONE—LINER的方法给一个框架的每一行一个由整数和字符串组成的唯一id?

改进大型数据集的框架性能

如何使用Pandas DataFrame按日期和项目汇总计数作为列标题

Python脚本使用蓝牙运行在Windows 11与raspberry pi4

合并帧,但不按合并键排序

Tkinter菜单自发添加额外项目

如何在Python中使用另一个数据框更改列值(列表)

Geopandas未返回正确的缓冲区(单位:米)

如何检测鼠标/键盘的空闲时间,而不是其他输入设备?

(Python/Pandas)基于列中非缺失值的子集DataFrame