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

批量处理DataFrame并多模型评分后合并的问题求助

问题分析与解决方案

错误原因

你当前的代码逻辑存在两个核心问题:

  1. 数据拼接逻辑错误:每个模型处理所有数据批后,会生成仅含该模型评分列的DataFrame,最后按行拼接导致同一行数据重复N次(N为模型数量),每行仅对应模型的评分有值。
  2. 违反内存约束:一次性读取全量百万行数据到full_df,不符合"无法一次性加载全量数据到内存"的要求。

修改思路

  1. 用分块读取CSV替代全量加载,避免内存溢出;
  2. 一次性加载所有模型(满足仅加载一次的要求);
  3. 对每个数据块(100行),直接追加所有模型的评分列,而非生成多个独立DataFrame;
  4. 处理完的块可直接追加到输出文件,无需全量存于内存。

修改后的代码

import pandas as pd

# 配置参数
batch_size = 100
output_file = 'target_df.csv'
list_of_models = [model1, model2, model3]  # 替换为你的实际模型列表

# 1. 一次性加载所有模型(仅执行一次)
loaded_models = []
for idx, model in enumerate(list_of_models, 1):
    model.load()
    # 绑定评分列名与对应模型
    loaded_models.append((f'score_{idx}', model))

# 2. 分块读取原始数据,逐块处理并保存
first_write = True
# 用chunksize分块读取,避免全量加载内存
for chunk in pd.read_csv('fulldf.csv', chunksize=batch_size):
    # 为当前块添加所有模型的评分列
    for col_name, model in loaded_models:
        # 替换为你的实际评分生成逻辑
        scores = model.predict(chunk['text'].tolist())
        chunk[col_name] = scores
    
    # 将处理好的块追加到输出文件
    chunk.to_csv(
        output_file,
        mode='a',
        header=first_write,
        index=False
    )
    first_write = False  # 后续块不再写入表头

# 若内存允许,可读取生成的文件得到完整DataFrame
# total_df = pd.read_csv(output_file)

备选方案(内存允许时)

如果必须在内存中暂存所有数据批,可调整为以下逻辑(仍优先推荐分块写入方案):

import pandas as pd

batch_size = 100
list_of_models = [model1, model2, model3]
df_batches = []

# 分块读取数据到内存(仅适合内存可容纳的场景)
for chunk in pd.read_csv('fulldf.csv', chunksize=batch_size):
    df_batches.append(chunk.copy())

# 加载所有模型
loaded_models = []
for idx, model in enumerate(list_of_models, 1):
    model.load()
    loaded_models.append((f'score_{idx}', model))

# 为每个批添加所有评分列
processed_batches = []
for batch in df_batches:
    for col_name, model in loaded_models:
        scores = model.predict(batch['text'].tolist())
        batch[col_name] = scores
    processed_batches.append(batch)

# 合并所有批得到目标DataFrame
total_df = pd.concat(processed_batches, ignore_index=True)
total_df.to_csv('target_df.csv', index=False)

关键逻辑说明

  • 模型仅在初始化阶段加载一次,全程复用;
  • 每个数据块一次性添加所有模型的评分列,避免行重复;
  • 分块读取从根源解决全量内存加载的问题;
  • 最终输出的DataFrame每行仅保留一次,包含所有模型的评分列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 21:47:37