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

如何将指定DataFrame追加到DataFrame字典的所有测试DataFrame中?

解决方案

问题分析

原代码存在以下无效/错误操作:

  • test_dict.update 未传入任何参数,完全不起作用
  • x|patchdataincl 是语法错误,且遍历test_dict时x是字典的键,不是对应的DataFrame对象
  • 追加操作的时机和位置错误,没有对拆分后的测试DataFrame做正确的合并处理

正确实现方案

要将patchdataincl追加到test_dict内的所有测试DataFrame中,如果是行追加(纵向合并数据),使用pd.concat是最直接的方式;如果是列追加(横向合并字段),则调整concat的轴参数或使用merge。以下是两种场景的实现:

场景1:行追加(将patchdataincl的所有行加到测试集末尾)

修改后的完整代码

import pandas as pd
from sklearn.model_selection import train_test_split

count = 0
while count < 50:
    count += 1
    num_samples = 100
    
    test_dict = dict()        
    ctrl_dict = dict()        
    
    if io == 1:  
        try:
            for x in range(num_samples):
                test_dict[x], ctrl_dict[x] = train_test_split(
                    data, 
                    test_size=1-patchPct, 
                    stratify=data[['sales_per_store_rank', 'store_cnt_rank', 'division']]
                )
        except:
            for x in range(num_samples):
                test_dict[x], ctrl_dict[x] = train_test_split(
                    data, 
                    test_size=1-patchPct, 
                    stratify=data[['sales_per_store_rank', 'store_cnt_rank']]
                )
    elif io == 2:
        try:
            for x in range(num_samples):
                test_dict[x], ctrl_dict[x] = train_test_split(
                    data, 
                    test_size=1-patchPct, 
                    stratify=data[['sales_per_store_rank', 'store_cnt_rank', 'division']]
                )
            # 拆分完成后统一追加patchdataincl
            for key in test_dict:
                test_dict[key] = pd.concat([test_dict[key], patchdataincl], ignore_index=True)
        except:
            for x in range(num_samples):
                test_dict[x], ctrl_dict[x] = train_test_split(
                    data, 
                    test_size=1-patchPct, 
                    stratify=data[['sales_per_store_rank', 'store_cnt_rank']]
                )
            # 拆分完成后统一追加patchdataincl
            for key in test_dict:
                test_dict[key] = pd.concat([test_dict[key], patchdataincl], ignore_index=True)

关键说明

  • pd.concat([df1, df2], ignore_index=True):纵向合并两个DataFrame,ignore_index=True会重置合并后的索引,避免出现重复索引问题
  • 统一处理的方式比在循环内逐个处理更简洁,逻辑更清晰,尤其适合大样本量的场景

场景2:列追加(将patchdataincl的字段合并到测试集)

如果需要横向合并字段,确保两个DataFrame的索引或匹配键一致,修改合并代码即可:

# 列追加示例(假设按索引匹配)
for key in test_dict:
    test_dict[key] = pd.concat([test_dict[key], patchdataincl], axis=1)

# 或按指定键合并(比如存在共同的id字段)
for key in test_dict:
    test_dict[key] = pd.merge(test_dict[key], patchdataincl, on="共同字段名", how="left")

内容的提问来源于stack exchange,提问作者a.s.1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:10:49