【问题标题】:How to split / explode dataframe dictionary entry into multiple rows如何将数据框字典条目拆分/分解为多行
【发布时间】:2019-01-23 08:04:26
【问题描述】:

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

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    也许你可以用apply检查,这比cold的方法慢

    df=df.assign(**df.extras.apply(pd.Series).add_prefix('extras.'))
    

    【讨论】:

    • 这个解决方案拯救了我的一天。非常感谢@BEN_YO
    • @KumarKS yw :-) 快乐编码
    【解决方案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                                {}
    

    【讨论】:

    • 我想保留顶级 col 名称 extras.value1
    猜你喜欢
    • 2021-12-08
    • 1970-01-01
    • 2022-01-20
    • 2020-10-23
    • 1970-01-01
    • 2023-04-09
    • 2015-04-04
    相关资源
    最近更新 更多