将一系列的字典转换为数据框 - Pandas

11

我正在尝试将一系列的字典转换成数据框

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}

我希望最终的数据框中每个键都成为自己的列。

neg   neu     pos
0.0.  0.462   0.538
0.0   0.609   0.391
..    ..      ..

我该如何使用Pandas实现这一目标?

2个回答

31

考虑到您拥有的序列,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}

您可以将Series转换为列表并调用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

或者您可以对每一行应用 pd.Series 构造器。因为现在每一行都是一个 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

0

可能有更好的方法来做这件事...但是根据你拥有的结构化数据,这似乎相当容易。

否则,请查看此帖子以重组字典

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)

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接