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

如何读取Excel中从空列开始的数据(空列位置随工作表动态变化)

解决方案

核心思路

先全量读取单个工作表的所有内容,自动识别第一个空表头列的位置,再从该位置开始截取后续所有列,即可适配不同工作表的空列位置差异。

具体实现步骤

  • 步骤1:全量读取工作表内容
    先不限制读取列,把单个工作表的完整数据读入DataFrame,保留原始表头行:
    import pandas as pd
    
    # 读取单个工作表示例,header=0表示第一行为表头
    df = pd.read_excel("你的工作簿路径.xlsx", sheet_name="目标工作表名", header=0)
    
  • 步骤2:定位第一个空表头列的位置
    兼容Excel空单元格读入后产生的NaN、空字符串两种情况:
    # 筛选出所有空表头的列名
    empty_cols = df.columns[df.columns.isna() | (df.columns.str.strip() == "")]
    if len(empty_cols) == 0:
        # 无空表头时可按需调整逻辑,这里默认取全部列
        df_target = df.copy()
    else:
        # 取第一个空表头的位置
        first_empty_pos = df.columns.get_loc(empty_cols[0])
        # 从第一个空列开始截取所有后续列
        df_target = df.iloc[:, first_empty_pos:]
    
  • 步骤3:批量处理所有工作表
    如果需要遍历工作簿内所有工作表,可调整代码如下:
    # 读取所有工作表,返回字典格式:键为工作表名,值为对应DataFrame
    all_sheets = pd.read_excel("你的工作簿路径.xlsx", sheet_name=None, header=0)
    processed_sheets = {}
    
    for sheet_name, df in all_sheets.items():
        empty_cols = df.columns[df.columns.isna() | (df.columns.str.strip() == "")]
        if len(empty_cols) == 0:
            processed_sheets[sheet_name] = df
        else:
            first_empty_pos = df.columns.get_loc(empty_cols[0])
            processed_sheets[sheet_name] = df.iloc[:, first_empty_pos:]
    

原代码不生效的原因

你之前使用的df.header是错误写法,pandas中表头属性为df.columns,且shift()是沿行方向移动数据的方法,和筛选列的需求不匹配,因此无法实现预期效果。

内容的提问来源于stack exchange,提问作者Kimchi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:36:03