You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 10:20:43