多工作表Excel中按特定标识指定起始行读取数据的问题求助
错误原因
你写的代码是从DataFrame的行索引中搜索「08:00」,但实际你的「08:00」存储在第一列的单元格中,不在索引里,自然会报找不到的错误。
解决方案
处理这种动态起始行的Excel读取,统一按以下逻辑实现即可:
- 先全量读取工作表的所有内容,不提前指定表头,避免无效行干扰
- 逐行扫描定位包含「08:00」的行号
- 从目标行的前一行开始截取数据,再重新设置表头
完整代码示例
import pandas as pd # 读取整个Excel工作簿 xls = pd.ExcelFile("你的文件路径.xlsx") processed_sheets = [] for sheet_name in xls.sheet_names: # 读取当前工作表全部内容,不指定表头 df_raw = pd.read_excel(xls, sheet_name=sheet_name, header=None) # 定位所有包含「08:00」的行(全列扫描,兼容08:00位置不固定的场景) matched_rows = df_raw[df_raw.apply( lambda row: row.astype(str).str.contains("08:00").any(), axis=1 )].index # 跳过没有匹配到内容的工作表 if len(matched_rows) == 0: continue # 取第一个匹配行的前一行作为数据起始行 start_row = matched_rows[0] - 1 # 截取数据并设置表头 df_result = df_raw[start_row:].reset_index(drop=True) df_result.columns = df_result.iloc[0] df_result = df_result[1:].reset_index(drop=True) processed_sheets.append(df_result) # 后续可以按需处理processed_sheets里的所有工作表数据
优化说明
如果确认「08:00」只会出现在第一列,可将定位匹配行的代码替换为以下内容,扫描效率更高:
matched_rows = df_raw[df_raw[0].astype(str).str.contains("08:00")].index
内容的提问来源于stack exchange,提问作者Kimchi
相关产品推荐
相关产品推荐

