如何将指定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
相关产品推荐
相关产品推荐

