Pandas 从dataframe列中包含的列表中提取字典值

Pandas 从dataframe列中包含的列表中提取字典值,pandas,Pandas,我试图从Pandas数据框中列表中包含的字典中提取值。目标是将id键拆分为多个列。示例数据如下所示: Column_Header [{'id': '498', 'relTypeId': 2'},{'id': '499', 'relTypeId': 3'}] [{'id': '499', 'relTypeId': 3'},{'id': '500', 'relTypeId': 4'},{'id': '501', 'relTypeId': 5'}] 我试过如下方法 list(map(lambda x

我试图从Pandas数据框中列表中包含的字典中提取值。目标是将id键拆分为多个列。示例数据如下所示:

Column_Header
[{'id': '498', 'relTypeId': 2'},{'id': '499', 'relTypeId': 3'}]
[{'id': '499', 'relTypeId': 3'},{'id': '500', 'relTypeId': 4'},{'id': '501', 'relTypeId': 5'}]
我试过如下方法

list(map(lambda x: x["id"], df["Column_Header"]))

但得到的错误如下: “列表索引必须是整数或片,而不是str”。所需的o/p为:

col1|col2|col3
498 |499 |
499 |500 |501


有人能帮忙吗?

我们可以先进行
分解
,然后用
cumcount
创建附加键,然后旋转

s=df.Column_Header.explode().str['id']
s=pd.crosstab(index=s.index,columns=s.groupby(level=0).cumcount(),values=s,aggfunc='sum')
Out[133]: 
col_0    0    1    2
row_0               
0      498  499  NaN
1      499  500  501

如果性能很重要,请在字典的键中使用嵌套列表理解和select
id

df = pd.DataFrame([[y['id'] for y in x] for x in df['Column_Header']], index=df.index)
print (df)
     0    1     2
0  498  499  None
1  499  500   501
如果可能,某些缺少的值将使用:

L = [[y['id'] for y in x] if  isinstance(x, list) else [None] for x in df['Column_Header']]
df = pd.DataFrame(L, index=df.index)

谢谢Jezrel,我尝试了你的解决方案,但得到的错误如下—“TypeError:“float”对象不可编辑”谢谢Yoben,我尝试了,但得到的错误是—“AttributeError:“Series”对象没有属性“explode”。explode函数是Panda library的一部分,还是我做错了什么?@Akki explode是Panda 0.25.0后的新功能检查你Panda V:-)是的,我使用的是较低版本的0.20,不幸的是我无法更新Panda,因为我没有管理员权限!你还有别的建议吗?@Akki我的自我定义功能