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

如何用pandas导入Excel数据至Time为08-10的指定行并忽略后续内容

解决方法

针对不同工作表中标记行位置不固定的场景,可根据数据量大小选择以下两种方案:

方案1:全量读取后截断(适合数据量较小的场景)

逻辑最简单易维护,先读取整张工作表数据,再按08-10标记行的位置截断保留前序数据:

import pandas as pd

# 沿用你原有的读取参数读取全表
df_full = pd.read_excel("2019-data.xls", sheet_name="110", header=4)

# 查找Time列值为08-10的行索引
match_rows = df_full[df_full['Time'] == '08-10']
if not match_rows.empty:
    # 截取从开头到标记行(含标记行)的所有数据
    cutoff_idx = match_rows.index[0]
    data = df_full.loc[:cutoff_idx, :]
else:
    # 未找到标记行时的自定义处理,可根据需求调整
    data = df_full
    print("当前工作表未找到08-10标记行,已保留全部数据")

方案2:预扫表确定读取行数(适合数据量极大的场景)

如果单表数据量过大不想全量读取浪费内存,可以先用openpyxl只读模式扫描工作表找到标记行位置,再给pd.read_excel传入nrows参数仅读取指定行数:

import pandas as pd
from openpyxl import load_workbook

file_path = "2019-data.xls"
sheet_name = "110"
header_row = 4  # 对应你原有的header参数

# 只读模式加载工作簿,扫描标记行位置
wb = load_workbook(filename=file_path, read_only=True, data_only=True)
ws = wb[sheet_name]

cutoff_rows = None
# 从表头下方的第一行数据开始遍历
for row_num, row in enumerate(ws.iter_rows(min_row=header_row+2, values_only=True), start=1):
    if row[0] == '08-10': # Time列为第一列
        cutoff_rows = row_num
        break
wb.close()

# 按扫描到的截止行数读取数据
read_params = {"sheet_name": sheet_name, "header": header_row}
if cutoff_rows:
    read_params["nrows"] = cutoff_rows
data = pd.read_excel(file_path, **read_params)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:54:03