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

循环导致DataFrame重复500次,求更优雅的多DataFrame合并方案

问题原因

你输出重复500次的核心原因是:每个Excel的Summary工作表包含500行数据,执行data["Batch"] = data.iloc[0, 2]时,会给这500行每一行都赋值同一个Batch值,最终合并后自然会出现大量重复的Batch记录。

优雅的合并方案

根据你的需求,分两种场景优化:

场景1:仅需要每个Excel文件对应的Batch值

不需要加载整个工作表,只提取目标Batch值并生成单行DataFrame,这样合并后不会有重复:

import pandas as pd
import glob

path = r"C:\Users\A\Downloads\*.xls"

# 用列表推导式批量处理,仅提取每个文件的Batch值
batch_list = [
    pd.DataFrame({"Batch": [pd.read_excel(file, sheet_name="Summary").iloc[0, 2]]})
    for file in glob.glob(path)
]

final_data = pd.concat(batch_list, ignore_index=True)
print(final_data)

场景2:需要保留原工作表数据,同时去除Batch列重复展示

如果你的真实需求是给每个文件的数据集标记Batch,但后续只需要唯一的Batch值展示,可以用drop_duplicates()去重:

import pandas as pd
from tqdm import tqdm
import glob

path = r"C:\Users\A\Downloads\*.xls"

list_data = []
for file in tqdm(glob.glob(path)):
    data = pd.read_excel(file, sheet_name="Summary")
    data["Batch"] = data.iloc[0, 2]
    list_data.append(data)

final_data = pd.concat(list_data, ignore_index=True)[["Batch"]].drop_duplicates()
print(final_data)

大文件场景的内存优化写法

如果待处理的Excel文件数量多、体积大,用生成器替代列表存储DataFrame,避免一次性加载所有数据到内存:

import pandas as pd
import glob

path = r"C:\Users\A\Downloads\*.xls"

def load_batch_data(file):
    df = pd.read_excel(file, sheet_name="Summary")
    df["Batch"] = df.iloc[0, 2]
    return df

# 生成器表达式,逐文件处理并合并
final_data = pd.concat((load_batch_data(file) for file in glob.glob(path)), ignore_index=True)[["Batch"]].drop_duplicates()
print(final_data)

内容的提问来源于stack exchange,提问作者Hertyuw

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:55:19