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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:05:18