如何用Python Pandas从多Excel文件生成指定信息的大DataFrame
解决多Excel文件提取信息并合并为多列DataFrame的问题
你的思路方向是对的——循环处理每个文件提取信息,但问题出在每次循环都直接覆盖了Final变量,导致最后只保留了最后一个文件的数据,而且没有把各文件的列横向拼接起来。我来给你调整一下代码逻辑:
核心问题分析
你当前的代码里,每次循环都执行Final = pd.DataFrame(info),这相当于把Final重新赋值为当前文件的提取结果,之前循环的结果完全被覆盖了,所以最后只能看到最后一个文件的数据。要实现多列并排,我们需要先收集每个文件处理后的小DataFrame,再横向合并它们。
调整后的代码示例
import pandas as pd # 先初始化一个空列表,用来存储每个文件处理后的DataFrame片段 processed_data = [] for idx, file_path in enumerate(filepaths): # 读取指定工作表 df = pd.read_excel(file_path, sheet_name='Sheet1') # 执行你的提取逻辑,替换成你实际的otherslices代码 info_slice = df[['目标列1', '目标列2']] # 这里只是示例,你换成自己的切片逻辑 # 给当前文件的列名加上标识(比如文件序号或文件名),避免列名重复导致合并冲突 # 比如原来的列名是"销售额",处理后变成"销售额_文件1"、"销售额_文件2" info_slice.columns = [f"{col}_文件{idx+1}" for col in info_slice.columns] # 将处理好的片段加入列表 processed_data.append(info_slice) # 横向合并所有片段(axis=1表示按列拼接) Final = pd.concat(processed_data, axis=1)
额外注意事项
- 如果每个文件提取的行数不一致,
pd.concat会自动在缺失的行填充NaN,如果需要保证行数一致,要检查你的提取逻辑是否统一(比如都是提取固定行数,或者按相同的索引匹配)。 - 如果想用文件名而不是序号作为列名后缀,可以把
f"{col}_文件{idx+1}"改成f"{col}_{os.path.basename(file_path)}",记得先导入os模块。
内容的提问来源于stack exchange,提问作者fwench_toast




