如何将数据框字典条目拆分/分解为多行

时间:2019-01-21 23:51:37

标签: python python-3.x pandas dataframe

我从一个复杂的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'            {}

2 个答案:

答案 0 :(得分:2)

使用popconcat

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.'))