You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 14:48:24