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 index
ValueError: All arrays must be of the same length
dict强转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
的相关经验文章,请参考:
・
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。