将一系列字典转换为 DataFrame - Pandas
Posted
技术标签:
【中文标题】将一系列字典转换为 DataFrame - Pandas【英文标题】:Turn series of dictionaries into a DataFrame - Pandas 【发布时间】:2018-02-02 23:28:52 【问题描述】:我正在尝试将一系列字典转换为数据框
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
.. .. ..
如何使用 Pandas 完成此任务?
【问题讨论】:
【参考方案1】:可能有更好的方法来做到这一点...但是使用您拥有的结构化数据似乎很容易。
否则看this post改字典
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)
【讨论】:
【参考方案2】:鉴于您的系列,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
或者你可以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
【讨论】:
以上是关于将一系列字典转换为 DataFrame - Pandas的主要内容,如果未能解决你的问题,请参考以下文章
将列表转换为 DataFrame 并在 DataFrame 列中拆分嵌套字典 - Python 3.6
将 pandas.DataFrame 转换为 Python 中的字典列表