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

如何迭代列名存在差异的DataFrame完成交叉训练机器学习模型任务

原处理方式合理性判断

原处理方式存在多处缺陷,不合理:

  • 仅做了标签列存在性判断,没有处理温度列的名称差异,会导致训练和测试时特征列名不一致,模型预测报错
  • 代码中model.fit(X,target1)的target1没有提前从df中取出赋值,直接运行会报变量未定义错误
  • 现有循环逻辑仅能完成在每个数据集上单独拟合模型,无法实现「一个当训练集、另一个当测试集」的交叉训练需求

可行实现方案

最规范的处理方式是先统一两个数据集的列名,消除差异后再执行交叉训练,后续逻辑不需要额外做分支判断,可读性和可维护性更高。

完整代码实现如下:

步骤1:导入依赖(可替换为你实际使用的模型库)

import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# 你自己的df1、df2可以直接替换这里的示例数据构造逻辑
# 构造df1示例
df1 = pd.DataFrame({
    'Temperature': [300,298,300,298,298],
    'feat_1': [2.4,3.2,2.4,1.6,3.2],
    'feat_2': [1.2,1.5,1.2,1.5,1.5],
    'feat_3': [2.4,5.7,2.4,3.2,2.4],
    'target1': [1.5,3.4,1.5,3.4,1.4]
})
# 构造df2示例
df2 = pd.DataFrame({
    'Temp': [298,298,300,298,298],
    'feat_1': [3.4,6.2,2.4,4.6,3.2],
    'feat_2': [1.2,1.5,3.3,2.5,1.5],
    'feat_3': [3.4,4.7,2.4,9.2,5.4],
    'target2': [2.5,3.4,4.5,3.4,6.4]
})

步骤2:统一列名消除差异

# 重命名列,统一为temperature(温度)、target(标签)
df1_processed = df1.rename(columns={'Temperature':'temperature', 'target1':'target'})
df2_processed = df2.rename(columns={'Temp':'temperature', 'target2':'target'})

# 存入列表备用
data_list = [df1_processed, df2_processed]

如果后续还有更多同类型差异的数据集,可以封装通用标准化函数:

def standardize_df(df):
    col_map = {}
    for col in df.columns:
        # 匹配温度列统一命名
        if col.lower() in ['temperature', 'temp']:
            col_map[col] = 'temperature'
        # 匹配标签列统一命名
        elif col.lower().startswith('target'):
            col_map[col] = 'target'
    return df.rename(columns=col_map)

# 调用函数一键标准化
df1_processed = standardize_df(df1)
df2_processed = standardize_df(df2)

步骤3:for循环实现两两交叉训练

# 初始化模型,可替换为你需要的任意机器学习模型
model = LinearRegression()

# 两轮交叉训练:i为训练集索引,1-i为测试集索引
for i in range(len(data_list)):
    # 取训练集
    train_df = data_list[i]
    X_train = train_df.drop('target', axis=1)
    y_train = train_df['target']
    
    # 取测试集
    test_df = data_list[1-i]
    X_test = test_df.drop('target', axis=1)
    y_test = test_df['target']
    
    # 训练+预测+评估
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    mse = mean_squared_error(y_test, y_pred)
    
    print(f"第{i+1}轮交叉训练结果:训练集为df{i+1},测试集为df{2-i},MSE={mse:.4f}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:48:02