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