【问题标题】:Python List of Dictionaries DenormalizationPython 字典列表非规范化
【发布时间】:2019-11-18 12:25:48
【问题描述】:

我有一个字典列表,如下所示:

 [[{'ID': '1',
    'Value': '100'},
   {'ID': '2',
    'Value': '200'}],
 [{'ID': '2',
  'Value': '300'},
  {'ID': '2',
  'Value': '300'}],
  ...]]

我想将它转换成一个非规范化的数据框,每个键都有新的列,例如:

#     ID Value ID  Value
#0    1  100   2    100
#1    2  300   2    300

如果一个项目有 3 对 id,则其他项目的值应该为 null。运行 pd.DataFrame(list) 只会创建一个 ID 和一个 Value 列,并将值放在下面。我们如何才能将其作为单独的列来实现?

【问题讨论】:

    标签: python arrays list dictionary


    【解决方案1】:

    您可以使用concat 函数来做到这一点:

    data = [pd.DataFrame(i) for i in input_data]
    out = pd.concat(data, axis=1)
    print(out)
    

    打印:

      ID Value ID Value
    0  1   100  2   300
    1  2   200  2   300
    

    键是沿列轴连接的axis=1

    编辑:

    刚刚看到所有“较短”列的零信息。此代码导致NaN 而不是零,但是可以使用fillna() 方法快速解决:

    out = out.fillna(value=0)
    

    例子:

    import pandas as pd
    
    input_data = [[{'ID': '1',
        'Value': '100'},
       {'ID': '2',
        'Value': '200'}],
     [{'ID': '2',
      'Value': '300'},
      {'ID': '2',
      'Value': '300'}],
     [{'ID': '2',
      'Value': '300'},
      {'ID': '2',
      'Value': '300'},
      {'ID': '3',
      'Value': '300'}]]
    
    data = [pd.DataFrame(i) for i in input_data]
    out = pd.concat(data, axis=1)
    out = out.fillna(value=0)
    print(out)
    

    打印:

      ID Value ID Value ID Value
    0  1   100  2   300  2   300
    1  2   200  2   300  2   300
    2  0     0  0     0  3   300
    

    【讨论】:

      猜你喜欢
      • 2021-07-11
      • 1970-01-01
      • 1970-01-01
      • 2015-01-03
      • 1970-01-01
      • 2016-06-09
      • 1970-01-01
      • 2023-03-06
      • 2012-12-31
      相关资源
      最近更新 更多