【问题标题】:Pandas column dict split to new column and rowsPandas 列字典拆分为新列和行
【发布时间】:2018-11-04 10:29:12
【问题描述】:

我在 pandas 数据框列中有一个字典,输入是,

import pandas as pd
df = pd.DataFrame([{'A': {'k1': 10}}, {'A': {'k2': 20, 'k3': 30}}, {'A': {'k4': 15}}])

df
                        A
0             {u'k1': 10}
1  {u'k3': 30, u'k2': 20}
2             {u'k4': 15}

我想将'A'列中dict的键和值拆分为新列并拆分为行(取决于字典中的键数),基本上输出应该是这样的,

  keys  values
0   k1      10
1   k3      30
2   k2      20
3   k4      15

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    选项 1(如果您在子字典中有所有唯一键)
    dict@987654322 @

    from collections import ChainMap   
    dct = dict(ChainMap(*[i['A'] for i in d]))
    pd.DataFrame(list(dct.items()), columns=['key', 'value'])
    
      key  value
    0  k1     10
    1  k4     15
    2  k2     20
    3  k3     30
    

    选项 2(如果您可能有重复的密钥)
    itertools.chain.from_iterable

    dct = list(itertools.chain.from_iterable([i['A'].items() for i in d]))
    df = pd.DataFrame(dct, columns=['key', 'value'])
    
      key  value
    0  k1     10
    1  k2     20
    2  k3     30
    3  k4     15
    

    【讨论】:

      【解决方案2】:

      使用列表推导和扁平化元组,然后 DataFrame 构造函数:

      L = [(k1, v1) for k, v in df['A'].to_dict().items() for k1, v1 in v.items()]
      
      df = pd.DataFrame(L, columns = ['keys','values'])
      print (df)
        keys  values
      0   k1      10
      1   k2      20
      2   k3      30
      3   k4      15
      

      或者创建DataFramestack

      df = (pd.DataFrame(df['A'].values.tolist())
             .stack().reset_index(level=0, drop=True)
             .reset_index())
      df.columns = ['keys','values']
      print (df)
        keys  values
      0   k1    10.0
      1   k2    20.0
      2   k3    30.0
      3   k4    15.0
      

      【讨论】:

        猜你喜欢
        • 2016-06-15
        • 1970-01-01
        • 2021-10-04
        • 2018-05-26
        • 2010-12-19
        • 2016-11-08
        • 1970-01-01
        相关资源
        最近更新 更多