如标题所述,在reviewing docs之后
我正在阅读一个.xlsx文件,其中一列“HOUR”有许多值,当示例的值为99时,我希望转换为“无”
我已经尝试了不同值的na_values参数:
na_values = ['99']
na_values = [r'99']
na_values = 99
...
然后这样读取excel:
accidents = pd.read_excel(filename, sheet_name= 'datos', na_values=[99])
但好像不管用
np.sum(accidents['HOUR'] == 99)
我得到一个大于0的值(这意味着值= 99的示例尚未转换为None/NaN)
我还读到,我应该包括选项
keep_default_na=False
但毫无结果。
“HOUR”列的值为:
accidents['HOUR'].unique()
array([ 8, 15, 9, 14, 11, 0, 13, 20, 3, 19, 17, 7, 22, 21, 16, 6, 23,
18, 10, 12, 1, 99, 4, 5, 2, 24], dtype=int64)
我已经把我的Pandas版本升级到1.5.1了,但还是不行,你知道为什么吗?
.xls文件位于:http://www.transtats.bts.gov/Fields.asp?Table_ID=1158
谢谢你
2条答案
按热度按时间rbpvctlc1#
阅读excel文件后,只需在 Dataframe 上应用
replace
方法:如果只想替换特定列(如“小时”)的值:
更新日期:
我想您想知道为什么
read_excel()
方法不能使用您提供的na值,如果您查看该方法的文档:na_值:标量、字符串、类似列表或dict,默认值为None要识别为NA/NaN的其他字符串。
它只接受
na_values
参数中的字符串,因此您需要将其作为字符串'99'传递,以便在您的情况下工作。由于某些原因,它不适用于Excel工作表中的
integer
na_values。根据文档read_excel
方法,列类型是推断的,但可以显式指定。也许它没有正确设置HOUR
列类型,因此na_values
不工作。我找到了一个解决办法,在方法中显式指定列数据类型,它工作得很好:2sbarzqh2#
好吧,最新消息。
我仍然没有弄清楚为什么read_excel()函数不能按预期工作
如果有人有这个问题,我建议将.xls/.xlsx文件转换为.csv,并像这样更改读取函数:
使用missing_values_dict执行以下操作:
有任何问题请告诉我!