从字典创建DataFrame
抱歉,如果这个问题重复了,但我在网上没有找到解决办法...
我有一个字典
{'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