我有 pandas daraframe,其中有多个包含字典列表的列。例如:
col1 col2 combine_col1 combine_col2
val1 val2 [{'x1':'v1','x2':'v2'}] [{'x3':'v3','x4':'v4','x5':'v5'}]
val11 val22 [{'x1':'v11','x2':'v22'}] [{'x3':'v33','x4':'v44','x5':'v55'}]
在组合列中,键的数量和它们的名称我不知道。它可以是任何东西。
我想分解那些具有字典列表的特定列,并将所有键作为新列获取。对于这个例子,输出数据框的列名应该是
col1, col2, x1, x2,x3,x4,x5
。目前我正在对组合列进行硬编码,然后进行分解操作。但我希望它自动发生。
json_normalize
和 str[0]
来选择它们:
import ast
cols = ['combine_col1','combine_col2']
#if necessary
#df[cols] = df[cols].applymap(ast.literal_eval)
df1 = (df.drop(cols, axis=1)
.join(pd.concat([pd.json_normalize(df[x].str[0]) for x in cols], axis=1)))
print (df1)
col1 col2 x1 x2 x3 x4 x5
0 val1 val2 v1 v2 v3 v4 v5
1 val11 val22 v11 v22 v33 v44 v55
Series.explode
:
df1 = (df.drop(cols, axis=1)
.join(pd.concat([pd.json_normalize(df[x].explode()) for x in cols], axis=1)))