Pandas如何读取大小写不同的同名Excel工作表并合并数据
解决方案
核心逻辑是先读取Excel文件的工作表名称列表,统一转为小写后匹配目标表名,再用匹配到的原始表名读取数据,修改后的完整代码如下:
## 2020 import glob as glob import pandas as pd import datetime pd.set_option('display.max_rows', None) data2020 = glob.glob('*20*') cols = ["VendorName", "VendorNo", "InvoiceNumber", "IvaPagadoOriginal","PeriodoEdo"] li3 = [] for filename in data2020: # 读取Excel文件对象,获取所有工作表名 xls = pd.ExcelFile(filename) target_sheet = None # 遍历工作表名,统一转小写后匹配 for sheet_name in xls.sheet_names: if sheet_name.lower() == 'virtual': target_sheet = sheet_name break # 可选:未匹配到对应工作表时跳过当前文件,避免程序报错 if not target_sheet: print(f"文件{filename}未找到virtual对应工作表,已跳过") continue # 用匹配到的实际表名读取数据 df = pd.read_excel(filename, sheet_name = target_sheet, index_col=None, usecols= cols) li3.append(df) frame3 = pd.concat(li3, axis=0, ignore_index=True) frame3 = frame3.iloc[:-1 , :] frame3 = frame3[(frame3.IvaPagadoOriginal != 0)] frame3 = frame3.dropna(subset=['InvoiceNumber']) frame3['Vat Returns Adjustment Category'] = 'Total foreign suppliers' frame3['Date'] = pd.to_datetime(frame3['PeriodoEdo']) frame3['Period Name'] = frame3['Date'].dt.strftime('%b-%y')
说明
- 该方案仅会额外读取Excel的工作表元信息,不会提前加载全表数据,对性能几乎无影响
- 新增的跳过逻辑可根据实际需求调整,比如需要严格校验文件完整性时可替换为抛出异常
内容的提问来源于stack exchange,提问作者silentninja89
相关产品推荐
相关产品推荐

