我有一个像这样的数据框
data = {'col_1': [1, 2],
'col_2': [[{'KEY': 'A', 'VALUE': 'a'}], [{'KEY': 'B', 'VALUE': 'b'}]],
'col_3': [[{'KEY': 'C', 'VALUE': 'c'}], [{'KEY': 'A', 'VALUE': 'a'}]]}
pd.DataFrame.from_dict(data)
col_1 col_2 col_3
0 1 [{'KEY': 'A', 'VALUE': 'a'}] [{'KEY': 'C', 'VALUE': 'c'}]
1 2 [{'KEY': 'B', 'VALUE': 'b'}] [{'KEY': 'A', 'VALUE': 'a'}]
我想转换每列中的字典列表,以便得到以下输出
col_1 col_2_KEY col_2_VALUE col_3_KEY col_3_VALUE
0 1 A a C c
1 2 B b A a
编辑1:
可能存在列值为空的情况
data = {'col_1': [1, 2],
'col_2': [[{'KEY': 'A', 'VALUE': 'a'}], [{'KEY': 'B', 'VALUE': 'b'}]],
'col_3': [[{'KEY': 'C', 'VALUE': 'c'}], [{'KEY': 'A', 'VALUE': 'a'}]]}
pd.DataFrame.from_dict(data)
col_1 col_2 col_3
0 1 [{'KEY': 'A', 'VALUE': 'a'}] []
1 2 [{'KEY': 'B', 'VALUE': 'b'}] [{'KEY': 'A', 'VALUE': 'a'}]
预期输出
col_1 col_2_KEY col_2_VALUE col_3_KEY col_3_VALUE
0 1 A a <blank> <blank>
1 2 B b A a
最佳答案
你可以尝试:
df = pd.concat([df.drop(['col_2','col_3'], axis=1)
, df['col_2'].apply(lambda x:pd.Series(x[0] if len(x)>0 else {})).rename(columns={'KEY':'col_2_KEY','VALUE':'col_2_VALUE'})
, df['col_3'].apply(lambda x:pd.Series(x[0] if len(x)>0 else {})).rename(columns={'KEY':'col_3_KEY','VALUE':'col_3_VALUE'})
], axis=1)
print(df)
col_1 col_2_KEY col_2_VALUE col_3_KEY col_3_VALUE
0 1 A a C c
1 2 B b A a
关于python - python中不同列中列内的字典的拆分列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55116169/