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

如何使用For循环处理不同命名的预测变量并批量计算MSE后保存至Excel表格

解决多组预测值的MSE计算与Excel保存问题(带循环实现)

嘿,我来帮你搞定这个问题!你已经写了大部分代码,现在只需要把这些预测值用循环批量处理,计算MSE,然后把公式和结果一起存到Excel里就行。下面是完整的解决方案:

步骤1:重构代码,用结构化方式管理预测公式和结果

与其单独定义14个prediction_i变量,不如把每个预测的名称、公式文本(用于后续存Excel)和计算结果放到一个列表里,这样循环处理起来非常方便:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import math

# 读取数据
df = pd.read_excel(r'D:/Phd_3_yr_start/kanwar_ka_bas/Rabi_19_20_index/testing/testing.xlsx', sheet_name = '9_feb')
productivity = df.iloc[:,0]
wdrvi = df.iloc[:,1]
cvi = df.iloc[:,2]
ndvi = df.iloc[:,3]
tndvi = df.iloc[:,4]
ndwi2 = df.iloc[:,5]

# 定义所有预测项:(预测名称, 公式文本, 预测值)
predictions = [
    ("prediction_1", "3.24 + 0.37*cvi", 3.24 + 0.37*cvi),
    ("prediction_2", "62.15*ndvi + 2.64*cvi + 32.79*ndwi2*tndvi - 28.09 - 22.37*tndvi - 31.29*ndwi2 - 62.19*wdrvi", 
     62.15*ndvi + 2.64*cvi + 32.79*ndwi2*tndvi - 28.09 - 22.37*tndvi - 31.29*ndwi2 - 62.19*wdrvi),
    ("prediction_3", "2.45 + 4.06*ndvi", 2.45 + 4.06*ndvi),
    ("prediction_4", "3.45 + 2.49*ndwi2", 3.45 + 2.49*ndwi2),
    ("prediction_5", "8.48*tndvi - 3.86", 8.48*tndvi - 3.86),
    ("prediction_6", "5.14 + 2.76*wdrvi", 5.14 + 2.76*wdrvi),
    ("prediction_7", "9.46 + 0.37*cvi*ndwi2 + 2.76*cvi*ndwi2*wdrvi - 1.08*cvi - 18.36*wdrvi**2", 
     9.46 + 0.37*cvi*ndwi2 + 2.76*cvi*ndwi2*wdrvi - 1.08*cvi - 18.36*wdrvi**2),
    ("prediction_8", "2.43 + 16.21*ndvi + 0.15*cvi**2 - 2.38*cvi", 
     2.43 + 16.21*ndvi + 0.15*cvi**2 - 2.38*cvi),
    ("prediction_9", "1.85 + 19.37*ndvi + 2.77*cvi*ndwi2 - 2.21*cvi - 17.34*ndvi*ndwi2", 
     1.85 + 19.37*ndvi + 2.77*cvi*ndwi2 - 2.21*cvi - 17.34*ndvi*ndwi2),
    ("prediction_10", "15.09*ndvi - 4.89 - 8.01*wdrvi", 15.09*ndvi - 4.89 - 8.01*wdrvi),
    ("prediction_11", "4.47 + 11.75*ndvi - 0.57*cvi - 3.99*tndvi", 4.47 + 11.75*ndvi - 0.57*cvi - 3.99*tndvi),
    ("prediction_12", "24.69*ndvi + 0.73*cvi - 10.57 - 4.24*tndvi - 19.69*wdrvi", 
     24.69*ndvi + 0.73*cvi - 10.57 - 4.24*tndvi - 19.69*wdrvi),
    ("prediction_13", "ndwi2 + 29.88*ndvi + 1.24*cvi - 17.24 - 4.24*tndvi - 28.64*wdrvi", 
     ndwi2 + 29.88*ndvi + 1.24*cvi - 17.24 - 4.24*tndvi - 28.64*wdrvi),
    ("prediction_14", "36.54*ndvi + 1.15*cvi*ndwi2 - 14.67 - 2.93*ndwi2 - 6.07*tndvi - 28.05*wdrvi", 
     36.54*ndvi + 1.15*cvi*ndwi2 - 14.67 - 2.93*ndwi2 - 6.07*tndvi - 28.05*wdrvi)
]

步骤2:用For循环批量计算MSE并整理结果

接下来,我们遍历这个predictions列表,逐个计算每个预测值的MSE,然后把结果存到一个新的列表里,最后转成DataFrame:

# 初始化结果列表
mse_results = []

for pred_name, pred_formula, pred_values in predictions:
    # 计算MSE:(真实值-预测值)的平方的均值
    mse = np.square(np.subtract(productivity, pred_values)).mean()
    # 把结果添加到列表,包含预测名称、公式、MSE值
    mse_results.append({
        "预测名称": pred_name,
        "预测公式": pred_formula,
        "MSE值": round(mse, 4)  # 保留4位小数,让结果更整洁
    })

# 转成DataFrame方便查看和保存
results_df = pd.DataFrame(mse_results)
print(results_df)

步骤3:保存结果到Excel

最后,把这个结果DataFrame保存到你指定的Excel文件里(可以选择覆盖原文件或者存到新文件):

# 保存到Excel,这里选择保存到一个新文件,避免覆盖原数据
results_df.to_excel(r'D:/Phd_3_yr_start/kanwar_ka_bas/Rabi_19_20_index/testing/mse_results.xlsx', 
                   sheet_name='MSE_Results', index=False)

为什么这么做?

  • 可维护性:如果后续要添加或修改预测公式,只需要在predictions列表里调整,不用改循环代码
  • 可读性:把预测名称、公式和计算结果绑定在一起,一目了然
  • 高效性:批量处理14个预测值,避免重复写14次MSE计算代码

内容的提问来源于stack exchange,提问作者Sudesh Singh Choudhary

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 00:42:41