pandas.read_excel()的na_values参数无法将99转为NaN求助
解决Excel读取时HOUR列99无法转为NaN的问题
方法1:读取后直接替换(最稳妥)
读取文件后直接对目标列做替换,不受read_excel参数限制:
import pandas as pd import numpy as np accidents = pd.read_excel(filename, sheet_name='datos') # 替换99为NaN accidents['HOUR'] = accidents['HOUR'].replace(99, np.nan) # 验证:应该返回0 print(np.sum(accidents['HOUR'] == 99))
如果需要保留整数类型(避免转为float),可使用pandas的nullable整数类型:
accidents['HOUR'] = accidents['HOUR'].replace(99, pd.NA).astype('Int64')
方法2:读取时用converters参数处理列
通过converters指定HOUR列的转换逻辑,读取时直接替换:
def process_hour(val): return np.nan if val == 99 else val accidents = pd.read_excel(filename, sheet_name='datos', converters={'HOUR': process_hour})
关于na_values失效的原因
na_values=[99]未生效的核心问题是整数列与NaN类型不兼容:
- pandas将HOUR列推断为
int64类型,但NaN是浮点类型,无法直接存入整数列,导致替换逻辑被跳过 - 即使添加
keep_default_na=False,也无法解决类型冲突的问题
内容的提问来源于stack exchange,提问作者Juan Paños Basterra
相关产品推荐
相关产品推荐

