我从一个复杂的JSON开始,经过一些操作,我非常接近我想要的东西,我唯一缺少的步骤是:
如何从输出转到输入,棘手的部分是我希望能够选择要展平的列
[input]
index extras info
0 a {'value1': 'one'} {'info2': 'two'}
1 a {'value1': 'one', 'value2': 'two'} {'info1': 'one', 'info2': 'two'}
2 a {'value2': 'two'} {}
3 b {'value2': 'two'} {'info1': 'one'}
4 b {} {'info2': 'one'}
5 b {'value2': 'two'} {}
[output]
index extras.value1 extras.value2 info
0 a 'one' Undefined {'info2': 'two'}
1 a 'one' 'two' {'info1': 'one', 'info2': 'two'}
2 a Undefined 'two' {}
3 b Undefined 'two' {'info1': 'one'}
4 b Undefined Undefined {'info2': 'one'}
5 b Undefined 'two' {}
答案 0 :(得分:2)
使用pop
和concat
:
popped = (pd.DataFrame(df.pop('extras').tolist())
.fillna('Undefined')
.add_prefix('extras.'))
pd.concat([popped, df], axis=1)
extras.value1 extras.value2 index info
0 one Undefined a {'info2': 'two'}
1 one two a {'info1': 'one', 'info2': 'two'}
2 Undefined two a {}
3 Undefined two b {'info1': 'one'}
4 Undefined Undefined b {'info2': 'one'}
5 Undefined two b {}
答案 1 :(得分:2)
也许您可以使用apply
进行检查,这比Cold的方法慢
df=df.assign(**df.extras.apply(pd.Series).add_prefix('extras.'))