计算MAE时遇NaN报错,如何忽略?已确定删除含NaN行
处理MAE计算中的NaN值问题
针对你遇到的mean_absolute_error因输入含NaN报错的问题,完全可以跳过包含NaN的行。结合你确定的删除含NaN行的方案,以下是具体实现:
1. 处理列表形式的真实值与预测值
针对你给出的列表示例,可通过numpy过滤掉含NaN的样本对后再计算MAE:
import numpy as np from sklearn.metrics import mean_absolute_error y_true = [3, -0.5, 2, 7, 10] y_pred = [2.5, np.NaN, 2, 8, np.NaN] # 生成过滤掩码:保留y_true和y_pred都不为NaN的样本 mask = ~(np.isnan(y_true) | np.isnan(y_pred)) # 提取过滤后的数值 filtered_true = np.array(y_true)[mask] filtered_pred = np.array(y_pred)[mask] # 计算MAE mae = mean_absolute_error(filtered_true, filtered_pred) print(mae)
2. 处理DataFrame场景(你的原始数据)
假设你的DataFrame名为df,要使用第2、3列(索引从0开始)计算MAE,直接删除包含NaN的行即可:
import pandas as pd from sklearn.metrics import mean_absolute_error # 删除所有含NaN的行(若需仅检查第2、3列,可添加参数:subset=[df.columns[1], df.columns[2]]) clean_df = df.dropna() # 提取处理后的真实值和预测值 y_true_clean = clean_df.iloc[:, 1] y_pred_clean = clean_df.iloc[:, 2] # 计算MAE mae = mean_absolute_error(y_true_clean, y_pred_clean) print(mae)
上述方法通过移除含NaN的样本对,确保输入mean_absolute_error的都是完整数值,从而解决报错问题。
内容的提问来源于stack exchange,提问作者Daniel M M
相关产品推荐
相关产品推荐

