从字典创建DataFrame

2 投票
2 回答
6190 浏览
提问于 2025-04-27 23:03

抱歉,如果这个问题重复了,但我在网上没有找到解决办法...

我有一个字典

{'a':1, 'b':2, 'c':3}

现在我想用这个字典来创建一个pandas的数据框(DF),其中列名对应字典的键,值对应字典的值。实际上,这个数据框应该只有一行。

a b c
1 2 3

在其他话题中,我只找到了解决方案,其中键和值都成为新数据框中的列。

暂无标签

2 个回答

1

为了灵活使用,你可以用 pd.DataFrame.from_dict 这个方法,并设置参数 orient='index'。这样做无论你的字典里的值是单个数字还是列表都可以。

注意最后的转置步骤,可以通过 df.T 或者 df.transpose() 来完成。

temp1 = {'a': 1, 'b': 2, 'c': 3}
temp2 = {'a': [1, 2], 'b':[2, 3], 'c':[3, 4]}

print(pd.DataFrame.from_dict(temp1, orient='index').T)

   a  b  c
0  1  2  3

print(pd.DataFrame.from_dict(temp2, orient='index').T)

   a  b  c
0  1  2  3
1  2  3  4
7

这里有一些注意事项,如果你直接把字典传给DataFrame的构造函数,就会出现错误:

ValueError: 如果使用的是所有标量值,你必须传递一个索引

为了避免这个问题,你可以传递一个索引,这样就可以正常工作了:

In [139]:

temp = {'a':1,'b':2,'c':3}
pd.DataFrame(temp, index=[0])
Out[139]:
   a  b  c
0  1  2  3

理想情况下,你的值应该是可迭代的,也就是说应该是像列表或数组这样的东西:

In [141]:

temp = {'a':[1],'b':[2],'c':[3]}
pd.DataFrame(temp)
Out[141]:
   a  b  c
0  1  2  3

感谢@joris指出,如果你把字典放在一个列表里,那么就不需要给构造函数传递索引了:

In [142]:

temp = {'a':1,'b':2,'c':3}
pd.DataFrame([temp])
Out[142]:
   a  b  c
0  1  2  3

撰写回答