python编程,pandas的dataframe类型如何转化为原生dict?
发布于 作者:苏南大叔 来源:程序如此灵动~
本文的话题是:dataframe类型数据,如何转为原生dict类型。转化的方案细节上是略有区别的。所以,得到的结果也是有所区别。具体采用何种转化方案,还要看读者自己的实际需求。

苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码之间的故事。测试环境:python@3.12.3,pandas@2.2.2,numpy@1.26.4。
前文回顾
主要回顾两篇文章:
- 如何定义一个
dataframe。https://newsn.net/say/pandas-dataframe.html dict如何转dataframe。https://newsn.net/say/dataframe-from-dict.html
本文是上述文章的姊妹篇,dataframe如何转dict?
龙套角色
本文的龙套角色如下:
import pandas as pd
d = {'s': ["su", "苏"], 'n': ["nan", "南"]}
df = pd.DataFrame.from_dict(d)注意变量d的写法。和后续的不同方案结果有关。

方案零,强转【不推荐】
dataframe强转dict不会报错,但是强制的结果显然并不是大家所需要的。
dd = dict(df)
print(dd,type(dd))输出:
{'s': 0 su
1 苏
Name: s, dtype: object, 'n': 0 nan
1 南
Name: n, dtype: object}
<class 'dict'>显然和期待输出值有较大差距。
方案一,参数默认【推荐】
这个数据还原效果上看,和原变量较为相似。转换为字典,列为键,行为值。
d1 = df.to_dict()
print(d1)输出:
{'s': {0: 'su', 1: '苏'}, 'n': {0: 'nan', 1: '南'}}方案二,orient='list'【推荐】
转换为字典,列名为键,列数据为值。在本文中,还原程度最高,效果最好。
d2 = df.to_dict(orient='list')
print(d2)输出:
{'s': ['su', '苏'], 'n': ['nan', '南']}方案三,orient='records'【不推荐】
将DataFrame的每一行转换为字典,索引为键,列数据为值。
d3 = df.to_dict(orient='records')
print(d3)
print(type(d3))输出:
[{'s': 'su', 'n': 'nan'}, {'s': '苏', 'n': '南'}]
<class 'list'>注意:这个结果拿到的类型是个list,而不是dict类型,list内部是dict类型。这多多少少和to_dict()的函数初衷有些不匹配。
结语
常见的数据类型是可以相互转化的,更多python相关经验文字,请参考: