输入:
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操作。
添加图片以获得更清晰:
答案 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