我正在尝试从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
有人可以帮忙吗?
答案 0 :(得分:1)
我们可以先做explode
,然后用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
答案 1 :(得分:0)
如果性能很重要,请在字典键中的选择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)