来自字典的DataFrame

时间:2014-10-16 14:14:15

标签: python pandas dictionary dataframe

很抱歉,如果它是重复的,但我没有在互联网上找到解决方案...

我有一些字典

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

现在我想构建pandas DF,其中列名对应于键,值对应于值。实际上它应该是只有一行的Df。

a b c
1 2 3

在另一个主题中,我发现只有解决方案,其中 - 键和值都是新DF中的列。

2 个答案:

答案 0 :(得分:3)

这里有一些注意事项,如果您只是将dict传递给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指出如果你将dict包装在一个列表中,那么你不必将索引传递给构造函数:

In [142]:

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

答案 1 :(得分:0)

为了提高灵活性,您还可以将pd.DataFrame.from_dictorient='index'一起使用。这适用于您的字典值是标量还是列表。

请注意最终转置步骤,该步骤可以通过df.Tdf.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