如何在Python Pandas中仅读取Excel的可见/已筛选行数据
问题解答
首先明确:纯Pandas本身没有提供直接读取Excel文件中已筛选/可见行的参数或方法。Pandas的read_excel底层是调用openpyxl/xlrd等解析库,只会读取工作表内全部的实际数据行,不会识别Excel自带的筛选隐藏状态。
如果不想大幅改动现有基于Pandas的代码,可以通过添加极少量openpyxl辅助代码实现需求,对原有逻辑入侵极低,修改后的代码可以参考如下:
首先你需要先安装openpyxl(如果没装的话执行pip install openpyxl),然后调整你的读取逻辑:
import os import pandas as pd from openpyxl import load_workbook def json_file(i_fname, indexList, i_code, i_path): PathLink = os.path.join(i_path, i_fname + '.json') # 新增部分:用openpyxl读取可见行索引 wb = load_workbook('input.xlsx', read_only=True, data_only=True) ws = wb['input_sheet1'] visible_row_indices = [] for idx, row in enumerate(ws.iter_rows(min_row=2)): # min_row=2是跳过表头,和你原有逻辑对齐 if not ws.row_dimensions[row[0].row].hidden: visible_row_indices.append(idx) wb.close() # 原有pandas读取逻辑几乎不变 excel_data_df = pd.read_excel('input.xlsx', sheet_name='input_sheet1', usecols=indexList, dtype={'codenum': str, 'name': str, 'school': str, 'city': str}) # 新增:只保留Excel中未被筛选隐藏的行 excel_data_df = excel_data_df.iloc[visible_row_indices] # 以下原有逻辑完全不变 df_filtered = excel_data_df.loc[excel_data_df["codenum"]==i_code] df_filtered.columns = ['Code', 'Student Name', 'Class', 'School Name','City Name'] cols_to_keep = ['Student Name', 'Class', 'School Name','City Name'] df_filtered = df_filtered[cols_to_keep] json_str = df_filtered.to_json(PathLink,orient='records',indent=2)
如果确实完全不想引入openpyxl,还有一个替代方案:你手动把Excel筛选后的内容另存为新的xlsx文件,再用pandas读取新文件即可,这个不需要改代码,只需要多一步手动操作。
内容的提问来源于stack exchange,提问作者Divya Sam
相关产品推荐
相关产品推荐

