我正在尝试将一系列词典转换为数据框
0 {'neg': 0.0, 'neu': 0.462, 'pos': 0.538}
1 {'neg': 0.0, 'neu': 0.609, 'pos': 0.391}
2 {'neg': 0.043, 'neu': 0.772, 'pos': 0.185}
3 {'neg': 0.035, 'neu': 0.765, 'pos': 0.2}
4 {'neg': 0.0, 'neu': 0.655, 'pos': 0.345}
5 {'neg': 0.0, 'neu': 0.631, 'pos': 0.369}
我希望生成的DataFrame让每个键都是它自己的列。
neg neu pos
0.0. 0.462 0.538
0.0 0.609 0.391
.. .. ..
如何用熊猫来实现这个目标?
答案 0 :(得分:7)
鉴于你的系列,ser
ser
Out:
0 {'neg': 0.0, 'neu': 0.462, 'pos': 0.538}
1 {'neg': 0.0, 'neu': 0.609, 'pos': 0.391}
2 {'neg': 0.043, 'neu': 0.772, 'pos': 0.185}
3 {'neg': 0.035, 'neu': 0.765, 'pos': 0.2}
4 {'neg': 0.0, 'neu': 0.655, 'pos': 0.345}
5 {'neg': 0.0, 'neu': 0.631, 'pos': 0.369}
您可以将系列转换为列表并调用DataFrame构造函数:
pd.DataFrame(ser.tolist())
Out:
neg neu pos
0 0.000 0.462 0.538
1 0.000 0.609 0.391
2 0.043 0.772 0.185
3 0.035 0.765 0.200
4 0.000 0.655 0.345
5 0.000 0.631 0.369
或者你可以apply
每行的pd.Series构造函数。 apply
将灵活并返回一个DataFrame,因为现在每行都是一个系列。
ser.apply(pd.Series)
Out:
neg neu pos
0 0.000 0.462 0.538
1 0.000 0.609 0.391
2 0.043 0.772 0.185
3 0.035 0.765 0.200
4 0.000 0.655 0.345
5 0.000 0.631 0.369
答案 1 :(得分:0)
有一种更好的方法可以做到这一点......但是对于你拥有的结构化数据来说,这似乎很容易。
否则请查看SAS support以改革字典
import pandas as pd
a = [{'neg': 0.0, 'neu': 0.462, 'pos': 0.538},
{'neg': 0.0, 'neu': 0.609, 'pos': 0.391},
{'neg': 0.043, 'neu': 0.772, 'pos': 0.185},
{'neg': 0.035, 'neu': 0.765, 'pos': 0.2},
{'neg': 0.0, 'neu': 0.655, 'pos': 0.345},
{'neg': 0.0, 'neu': 0.631, 'pos': 0.369}]
b = dict()
for key in a[0].keys():
b[key] = []
for dic in a:
b[key].append(dic[key])
pd.DataFrame(b)