Python pandas 将字典dict转化为DataFrame时需避免的坑
先上结论:
如果想将字典dict转化为只有一行的
DataFrame
,但字典中的值又存在数组等长度大于一的情况,可以先使用pd.Series()
,再使用to_frame
将Series
转化为DataFrame
,最后转置DataFrame
。可避免一些坑。 以下是详细阐述。
一,字典的value都是scalar,既都只有一个值
有这样一个字典
d = {'a':1, 'b':2, 'c':4}
如果直接使用pd.DataFrame(data=d)
,会出现以下的报错:
ValueError: If using all scalar values, you must pass an index
所以对于值都是scalar
的字典转化为DataFrame
的时候,需要指明index
,且注意index
需要是一个数组。如下:
pd.DataFrame(data=d, index=['value'])
>>>
a b c
value 1 2 4
笔者经常忘记加上index
,或者index
忘记需要是数组,影响了写代码的效率。所以笔者推荐使用pd.Series()
先将字典转化为Series
再使用to_frame
将Series
转化为DataFrame
,最后转置。如下:
pd.Series(data=d).to_frame().T
>>>
a b c
0 1 2 4
当然这个是看个人选择,下面的第二种情况则可能踩坑了。
二,字典的value长度不相同时
比如我们有这样一个字典,
d = {'a':1, 'b':[2,1], 'c':4}
想转化如下的DataFrame
a b c
0 1 [2, 1] 4
如果直接使用pd.DataFrame
,会出现以下的结果:
pd.DataFrame(data=d)
>>>
a b c
0 1 2 4
1 1 1 4
可以看到DataFrame
会按照长度最大的值进行填充。所以应该先用pd.Series
:
pd.Series(data=d).to_frame().T
>>>
a b c
0 1 [2, 1] 4
Done!