Python读取Excel时连字符被识别为0,如何转为NaN?
解决Excel显示为连字符(-)实际为0的单元格读取后转NaN问题
问题本质
这些单元格在Excel中设置了自定义单元格格式(比如将值为0的单元格格式化为显示"-"),实际存储的数值是0,而非文本"-"。因此pd.read_excel读取的是单元格实际值0,设置na_values='-'自然不会生效。
解决方法
方法1:读取后批量替换0为NaN
如果所有显示为"-"的单元格实际都是0,且需要将这些0转为NaN,可直接在读取后替换:
- 全表替换:
import pandas as pd df = pd.read_excel("你的文件路径.xlsx") df = df.replace(0, pd.NA)
- 指定列替换(仅处理目标列):
df["目标列名"] = df["目标列名"].replace(0, pd.NA)
方法2:读取时通过转换器处理
可以在读取阶段指定转换器函数,直接将0转为NaN:
- 针对特定列:
import pandas as pd def zero_to_na(val): return pd.NA if val == 0 else val df = pd.read_excel("你的文件路径.xlsx", converters={"目标列名": zero_to_na})
- 针对所有数值列:
df = pd.read_excel("你的文件路径.xlsx") # 筛选出所有数值类型的列 numeric_columns = df.select_dtypes(include=["int64", "float64"]).columns # 对数值列应用转换 df[numeric_columns] = df[numeric_columns].applymap(lambda x: pd.NA if x == 0 else x)
注意事项
如果Excel中存在需要保留的正常0值(不是显示为"-"的那些),需先明确区分这些单元格的特征(比如特定位置、列),再针对性替换,避免误改有效数据。
内容的提问来源于stack exchange,提问作者purple_plop
相关产品推荐
相关产品推荐

