如何分解熊猫数据框列并使用键创建新列

问题描述 投票:0回答:1

我有 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
。目前我正在对组合列进行硬编码,然后进行分解操作。但我希望它自动发生。

python-3.x pandas pandas-explode
1个回答
0
投票

如果样本数据中只有一个元素列表,请使用

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)))
© www.soinside.com 2019 - 2024. All rights reserved.