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

如何同步移除两个Pandas Series中的NaN与Inf值?

问题描述

我有两组Pandas Series数据actuals和predictions,数据示例如下:

409   -9938.1580
410   -9938.1580
411   -9938.1580
412   -9938.1580
413   -9938.1580
414   -9938.1580
415   NaN
416   -9703.9345
Name: actuals, dtype: float64
<class 'pandas.core.series.Series'>


409   NaN
410   -9938.1580
411   -9938.1580
412   -9944.1580
413   -9938.1580
414   -9000.1580
415   -1000.0000
416   -9903.9345
Name: predictions, dtype: float64
<class 'pandas.core.series.Series'>

当使用sklearn的mean_squared_error计算指标时:

import sklearn.metrics
mean_squared_error(actuals, predictions)

触发错误:

ValueError: Input contains NaN.

已知错误由NaN或Inf值导致,需要自动同步移除两个Series中存在NaN/Inf的条目及对应关联行,处理后的数据如下:

410   -9938.1580
411   -9938.1580
412   -9938.1580
413   -9938.1580
414   -9938.1580
416   -9703.9345
Name: actuals, dtype: float64
<class 'pandas.core.series.Series'>



410   -9938.1580
411   -9938.1580
412   -9944.1580
413   -9938.1580
414   -9000.1580
416   -9903.9345
Name: predictions, dtype: float64
<class 'pandas.core.series.Series'>
解决方法

方法1:合并为DataFrame批量清理

将两个Series合并成DataFrame,利用dropna()一键移除包含NaN/Inf的行,再拆分回原Series:

import pandas as pd

# 合并为DataFrame
df = pd.DataFrame({'actuals': actuals, 'predictions': predictions})
# 移除任意一列存在NaN/Inf的行
df_clean = df.dropna(how='any')
# 拆分回清理后的Series
actuals_clean = df_clean['actuals']
predictions_clean = df_clean['predictions']

方法2:基于索引精准筛选

先找出两个Series中同时有效的索引(无NaN/Inf),再用索引过滤原数据:

# 筛选两个Series中既非NaN也非Inf的索引
valid_idx = actuals.notna() & predictions.notna()
valid_idx = valid_idx & ~actuals.isin([float('inf'), float('-inf')]) & ~predictions.isin([float('inf'), float('-inf')])

# 提取清理后的Series
actuals_clean = actuals[valid_idx]
predictions_clean = predictions[valid_idx]

方法3:针对指标计算的快速处理

如果仅为了计算sklearn指标,可先将数据转换为数组并过滤异常值(注意此方法会丢失索引):

from sklearn.utils.validation import check_array

# 过滤NaN/Inf并转换为数组
actuals_arr = check_array(actuals, allow_nan=False, force_all_finite=True)
predictions_arr = check_array(predictions, allow_nan=False, force_all_finite=True)

# 直接用清理后的数组计算指标
sklearn.metrics.mean_squared_error(actuals_arr, predictions_arr)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:17:46