如何读取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
相关产品推荐
相关产品推荐

