拆分熊猫单列(字典列表)并附加为字典的新键作为新列



输入 :

df = pd.DataFrame({'a':[1,2], 
                   'b':[[{'x1':1,'x2':3},{'x1':4,'x2':1}],
                        [{'x1':5},{'x1':3,'x2':6}]], 
                   'c':[5,6]})

如果我应用操作

print(df['b'].apply(pd.Series))

输出为:

                    0                   1
0  {'x1': 1, 'x2': 3}  {'x1': 4, 'x2': 1}
1           {'x1': 5}  {'x1': 3, 'x2': 6}

预期输出 :

X1_0       x2_0     x1_1         x2_1
1           3        4              1
5          NaN         3              6

不应使用 EVEL 或 literal_eval 操作。

添加图像以获得更清晰:

您可以将concat与列表推导一起使用:

df1 = (pd.concat([pd.DataFrame(x) for x in df['b']], keys=df.index)
        .unstack()
        .dropna(how='all', axis=1)
        .sort_index(axis=1, level=1))
df1.columns = ['{}_{}'.format(a,b) for a,b in df1.columns]
print (df1)
   x1_0  x2_0  x1_1  x2_1
0     1   3.0     4   1.0
1     5   NaN     3   6.0

最新更新