python编程,原生dict类型如何转化为pandas的dataframe?
发布于 作者:苏南大叔 来源:程序如此灵动~
pandas库在python编程里面的角色越来越重要,原生的dict类型数据和pandas的dataframe类型之间是如何相互转化的呢?本文中做个简要的探讨。

苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码之间的故事。测试环境:python@3.12.3,pandas@2.2.2,numpy@1.26.4。
前文回顾
定义个dataframe的方式很多,可以参考:
dataframe类型数据和csv文件的相互转化,可以参考:
numpy和dataframe的相互转化,可以参考:
ndarray/list/set/tuple/dict的遍历方式对比:
可转换的dict
事实上,并不是所有的dict都能转化为dataframe。只有一部分dict类型数据,可以转化为dataframe。
d1 = {'s': "su"}
d2 = {'s': ["su"]}
d3 = {'s': ["su"], 'n': ["nan", "南"]}
d4 = {'s': ["su", "苏"], 'n': ["nan", "南"]}上面的四个dict中,只有d2和d4这两个dict才能变成dataframe。可以看到:能变成dataframe的dict,它的value都是list,并非普通的string或者int类型。并且每个作为value的list的长度都是相同的。
可能会得到下面的错误信息:
ValueError: If using all scalar values, you must pass an indexValueError: All arrays must be of the same lengthdict强转dataframe【推荐】
强转dataframe总是被优先推荐的,简单明了直接。
import pandas as pd
d = {'s': ["su", "苏"], 'n': ["nan", "南"]}
dd = pd.DataFrame(d)
print(dd)输出:
s n
0 su nan
1 苏 南from_dict()默认【推荐】
直接上代码:
import pandas as pd
d = {'s': ["su", "苏"], 'n': ["nan", "南"]}
dd = pd.DataFrame.from_dict(d)
print(dd)
dd = pd.DataFrame.from_dict(d, orient='columns')
print(dd)输出:
s n
0 su nan
1 苏 南orient英文解释为:朝向,方向。这里解释为数据的方向,默认为列。from_dict()索引做列名
from_dict()必然有其它的使用方式,但是,很不符合默认的逻辑。
import pandas as pd
d = {'s': ["su", "苏"], 'n': ["nan", "南"]}
dd = pd.DataFrame.from_dict(d, orient='index')
print(dd)
dd = pd.DataFrame.from_dict(d, orient='index', columns=['r1', 'r2'])
print(dd)输出:
0 1
s su 苏
n nan 南 r1 r2
s su 苏
n nan 南from_dict()特殊格式tight
# d = {}
pd.DataFrame.from_dict(d, orient='tight')这个特殊的tight格式及使用方式,留作以后讨论。
一个小trick
pd.DataFrame.from_dict(d)直接去掉.from_dict字样,一样能执行成功。当然,一个是类型强转,一个是调用了方法from_dict()。
结语
这个dataframe类型的数据,是使用python处理数据集的时候最常见也是最强大的表现形式,它由pandas这个第三方库提供。更多苏南大叔的python的相关经验文章,请参考:
・