如何迭代列名存在差异的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
相关产品推荐
相关产品推荐

