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

Pandas读取Excel时‘Delivered?’列非空却全部显示NaN问题求助

解决pandas读取Excel时‘Delivered?’列全为NaN的问题

以下是几个实用的排查和解决方向:

  • 精确匹配列名
    先打印所有列名,确认代码里的'Delivered?'和Excel里的列名完全一致——有时候列名前后藏着看不见的空格,或者问号是全角字符:

    print(file.columns.tolist())
    

    如果发现列名有差异,比如多了空格,要么用实际列名访问,要么重命名列:

    file.rename(columns={'实际列名': 'Delivered?'}, inplace=True)
    
  • 排查Excel本身的问题

    • 检查该列是否有合并单元格:合并单元格只会保留第一个单元格的值,其余位置读出来就是NaN
    • 确认单元格没有隐藏格式:比如字体颜色和背景色一致,看起来有内容但实际读取为空
    • 试试把该列复制到新的空白工作表,再用pandas读取新表,排除原表的格式干扰
  • 调整pandas读取参数

    • 关闭默认的NaN识别,避免把空字符串或特殊值判定为NaN:
      file = pd.read_excel(file_path, sheet_name="April", keep_default_na=False)
      
    • 指定读取引擎为openpyxl(先确保安装:pip install openpyxl),不同引擎对Excel格式的解析逻辑有差异:
      file = pd.read_excel(file_path, sheet_name="April", engine='openpyxl')
      
    • 用usecols指定列索引读取,比如知道Delivered?是第3列(从0开始计数):
      file = pd.read_excel(file_path, sheet_name="April", usecols=[0,1,2])
      
  • 直接用Excel引擎读取排查
    用openpyxl直接读取该列,验证是否能获取到值:

    from openpyxl import load_workbook
    wb = load_workbook(file_path)
    ws = wb["April"]
    # 假设Delivered?是第5列(从1开始计数)
    for row in ws.iter_rows(min_col=5, max_col=5, values_only=True):
        print(row[0])
    

    如果这里能读到值,说明是pandas的读取逻辑问题,可以把这些值手动赋值给DataFrame的对应列。

内容的提问来源于stack exchange,提问作者koliosis-work

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 10:53:25