使用Python合并指定工作表和列的多Excel时遇AttributeError报错求助
问题分析与修复方案
核心错误与问题点
- 触发报错的直接原因:
all_files是glob.glob()返回的文件路径列表,列表对象根本没有parse()方法,你错误地直接对列表调用了这个方法,这就是AttributeError: 'list' object has no attribute 'parse'的来源。 - 未实现需求的问题:后续循环里的
pd.read_excel(file)没有指定要读取的工作表(Data)和目标列,完全没达到你“指定工作表和指定列合并”的初衷。 - 弃用方法风险:
pd.DataFrame.append()已被Pandas官方弃用,长期使用可能出现兼容性问题。
修复步骤
- 删掉错误的
combined_df.append(all_files.parse(...))代码行,这行完全无效且触发报错。 - 循环读取每个文件时,用
pd.read_excel()明确指定sheet_name='Data'和usecols=columns,确保只读取目标工作表的指定列。 - 改用
pd.concat()合并数据框,替代已弃用的append()方法,效率和稳定性更高。
修复后的完整代码
import pandas as pd import glob import sys sys.path.insert(0, 'S:\\19 Performance Analytics\\ETL Data Extraction\\PyCr') # 定义Excel文件所在文件夹路径 path = r"C:\Users\jiacheng.heng\OneDrive - Shangri-La Group\NOVA\Arrival Check Tracker\CT2 Arrival Check Report\2023" # 获取文件夹下所有xlsx文件路径 all_files = glob.glob(path + "/*.xlsx") # 存储单个文件数据框的列表 df_list = [] # 要提取的目标列(已移除重复的Status列) columns = [ 'Report Pull Out Date (DD-MMM-YY)', 'Property', 'Confirmation No.', 'Guest Name', 'Arrival', 'Departure', 'Rate Code', 'Source', 'Arr. Transfer Type', 'Dep. Transfer Type', 'Status', 'Agent Initial', 'Remark', 'Completion Date', 'Completion Month', 'Received Month', 'Arrival Month', 'AHT', 'Pending Aging', 'SLA' ] # 遍历每个文件,读取指定工作表和列 for file in all_files: df = pd.read_excel(file, sheet_name='Data', usecols=columns) df_list.append(df) # 合并所有数据框 combined_df = pd.concat(df_list, ignore_index=True) # 导出合并后的Excel文件 combined_df.to_excel(r"S:\19 Performance Analytics\NOVA\CT2 Arrival Checks.xlsx", index=False)
注:原列列表里重复出现了Status列,修复时已移除其中一个,避免合并后出现重复列。
内容的提问来源于stack exchange,提问作者Cheng
相关产品推荐
相关产品推荐

