使用pandas读取Excel时将'-'解析为NaN未生效,如何修复?
问题修复方案
可能的原因
Excel中的-可能是数值格式下的占位符(比如单元格设置了自定义格式,显示为-但实际值是0),或者pandas默认的NA值规则与你设置的na_values产生了冲突。
解决方案
方案1:读取后直接替换
先正常读取表格,再全局替换-为NaN,兼容性最强:
import pandas as pd import numpy as np df = pd.read_excel(excel_file_path, header=0) df = df.replace('-', np.nan)
如果Excel中的-带有前后空格,用正则匹配替换:
df = df.replace(r'^\s*-\s*$', np.nan, regex=True)
方案2:使用converters参数指定列转换
在读取时针对每一列设置转换函数,精准处理-:
import pandas as pd import numpy as np def convert_val(x): return np.nan if x == '-' else x df = pd.read_excel( excel_file_path, header=0, converters={'first': convert_val, 'second': convert_val} )
方案3:强制指定keep_default_na=False
如果是默认NA值规则干扰,关闭默认NA值并仅指定-为NA:
df = pd.read_excel( excel_file_path, header=0, na_values='-', keep_default_na=False )
额外检查
如果以上方法都无效,打开你的Excel文件检查单元格格式:
- 选中显示
-的单元格,查看单元格格式是否为「数值」类的自定义格式(比如0;-;""),这种情况下单元格实际值是0,需要先将格式改为「文本」再重新输入-,再用上述方法读取。
内容的提问来源于stack exchange,提问作者NonSleeper
相关产品推荐
相关产品推荐

