拆分pandas单列(dict列表)并附加为dict的新键作为新列

时间:2018-01-24 08:27:40

标签: python pandas dictionary data-analysis

输入:

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操作。

添加图片以获得更清晰:

1 个答案:

答案 0 :(得分:0)

您可以将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