如何用循环读取多个Excel文件并合并为单个DataFrame?
解决多个Excel文件合并为单个DataFrame的问题
嗨,我来帮你搞定这个需求!你当前的代码问题在于每次循环都用新读取的temp直接覆盖了temp_final,导致之前读取的文件数据全部丢失,最后只剩下最后一个文件的内容。下面给你两种实用的实现方式,推荐第一种,因为在处理大量文件时效率更高:
方法一:先存入列表再合并(推荐)
这种方式是先把每个读取的DataFrame存入一个列表,最后一次性用pd.concat合并,比每次循环追加更高效,也更易维护。
import pandas as pd # 假设你的path是包含所有Excel文件路径的列表,比如: # path = ["file1.xlsx", "file2.xlsx", "file3.xlsx", ..., "file9.xlsx"] temp_list = [] # 注意:range(1,10)生成的是1-9的数字,而列表索引从0开始,所以要用i-1取path里的元素 for i in range(1, 10): temp = pd.read_excel(path[i-1]) temp_list.append(temp) # 合并所有DataFrame,ignore_index=True用来重置合并后的索引,避免索引混乱 temp_final = pd.concat(temp_list, ignore_index=True)
方法二:循环中直接追加到空DataFrame
如果你习惯直接在循环里处理,也可以先初始化一个空DataFrame,每次用pd.concat把新读取的内容追加进去(注意:旧版pandas的append方法已经被弃用,所以推荐用concat):
import pandas as pd # 初始化一个空的DataFrame temp_final = pd.DataFrame() for i in range(1, 10): temp = pd.read_excel(path[i-1]) # 把新读取的temp和temp_final合并,重置索引 temp_final = pd.concat([temp_final, temp], ignore_index=True)
重要注意事项
- 索引问题:一定要注意
range(1,10)和列表path的索引对应关系,path是从0开始的,所以要用i-1来获取对应的文件路径,否则会出现索引越界错误。 - 列结构一致性:如果你的Excel文件列结构不一样,
pd.concat会保留所有列,缺失的列会用NaN填充,如果你需要统一列结构,最好在读取后先做列名匹配或过滤处理。
内容的提问来源于stack exchange,提问作者SBad
相关产品推荐
相关产品推荐

