如何在For循环中合并Pandas DataFrame并生成新DataFrame?
解决方法
核心问题是你每次循环都用同一个变量df覆盖之前的结果,导致最后只保留了最后一个文件的数据。正确的做法是先把每个处理好的DataFrame存入一个列表,最后一次性合并所有列表中的DataFrame。
修改后的代码如下:
import pandas as pd from pathlib import Path # 目标文件夹路径 directory = "/lakehouse/default/Files/SP/SP_Xlsx/" # 初始化空列表,用于存储每个文件处理后的DataFrame dfs = [] # 遍历文件夹中的所有文件 for file in Path(directory).glob('*'): # 读取文件指定sheet df = pd.read_excel(file, sheet_name='Option') print(f"正在处理文件: {file}") # 移除索引为0、1、2、3的行 df = df.drop(index=[0,1,2,3]) # 将第一行设为列名,然后移除该行 df.columns = df.iloc[0] df = df[1:] # 只保留第一行数据(与原逻辑一致) df = df.head(1) # 将处理好的DataFrame加入列表 dfs.append(df) # 合并所有DataFrame merged_df = pd.concat(dfs, ignore_index=True) # 展示合并后的结果 display(merged_df)
关键改动说明:
- 新增
dfs = []空列表,用来暂存每个文件处理后的DataFrame,避免被覆盖。 - 循环末尾用
dfs.append(df)将当前文件的处理结果存入列表。 - 循环结束后用
pd.concat(dfs, ignore_index=True)合并所有DataFrame,ignore_index=True会重置合并后的索引,避免重复。 - 简化了原代码中
df.drop(df.index.to_list()[1:], axis=0)为df.head(1),逻辑完全一致,更简洁。
如果后续文件夹中新增了文件,再次运行脚本时,循环会自动遍历所有文件(包括新文件),处理后合并到最终的DataFrame中,满足你"每次运行脚本添加新文件"的需求。
内容的提问来源于stack exchange,提问作者Ross Garrett
相关产品推荐
相关产品推荐

