这篇文章的要点是我的原始数据中有“23”,我希望在我的结果字典中有“23”(而不是“23.0”)。以下是我尝试使用 Pandas 处理它的方法。
我的 Excel 工作表有一个编码区域列:
23
11
27
(blank)
25
最初,我创建了一个数据框,Pandas 将 Region 的 dtype 设置为 float64*
import pandas as pd
filepath = 'data_file.xlsx'
df = pd.read_excel(filepath, sheetname=0, header=0)
df
23.0
11.0
27.0
NaN
25.0
如果我使用 fillna()
将 NaN 替换为似乎可以消除小数的空格,Pandas 会将 dtype 转换为 object
。
df.fillna('', inplace=True)
df
23
11
27
(blank)
25
除了当我将数据帧转换为字典时我仍然得到小数:
data = df.to_dict('records')
data
[{'region': 23.0,},
{'region': 27.0,},
{'region': 11.0,},
{'region': '',},
{'region': 25.0,}]
有没有办法创建没有小数位的字典?顺便说一下,我正在编写一个通用实用程序,所以我不会总是知道列名和/或值类型,这意味着我正在寻找一个通用解决方案(相对于显式处理区域)。
非常感谢任何帮助,谢谢!
问题是,在 fillna('')
之后,尽管该列的类型为 object
,但您的基础值仍然是 float
s = pd.Series([23., 11., 27., np.nan, 25.])
s.fillna('').iloc[0]
23.0
相反,应用
格式化程序,然后替换
s.apply('{:0.0f}'.format).replace('nan', '').to_dict()
{0: '23', 1: '11', 2: '27', 3: '', 4: '25'}
我是一名优秀的程序员,十分优秀!