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

