Python字典非规范化列表

时间:2019-11-18 12:25:48

标签: python arrays list dictionary

我有一个字典列表,例如:

 [[{'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列,并将值放在下面。我们如何才能做到这一点作为单独的列?

1 个答案:

答案 0 :(得分: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