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

如何在Python中移除不同维度Numpy数组中的NaN值

移除含NaN的对应行解决方案

要解决这个问题,核心是先找到同时满足X对应行无NaN、y对应位置无NaN的行索引,再用这个索引统一过滤两个数组。

具体实现步骤

  1. 确保导入numpy(import numpy as np)
  2. 检测NaN位置:
    • 对二维数组X,用np.isnan(X).any(axis=1)生成每行是否含NaN的布尔数组(True表示该行有NaN)
    • 对一维数组y,用np.isnan(y)生成每个元素是否为NaN的布尔数组
  3. 筛选保留行:通过逻辑运算合并两个条件,取反后得到需要保留的行索引:keep_rows = ~(np.isnan(X).any(axis=1) | np.isnan(y))(~取反,|表示逻辑或,即只要X行或y元素有NaN就排除)
  4. 过滤数组:用布尔索引分别处理X和y:X_clean = X[keep_rows]、y_clean = y[keep_rows]

结合你的代码完整示例

import numpy as np
from numpy import array
import pandas as pd

def split_sequence(sequence, n_steps):
    X, y = list(), list()
    for i in range(len(sequence)):
        end_ix = i + n_steps
        if end_ix > len(sequence)-1:
            break
        seq_x, seq_y = sequence[i:end_ix], sequence[end_ix]
        X.append(seq_x)
        y.append(seq_y)
    return array(X), array(y)

# 模拟你的传感器数据
df_sensorRefill = pd.DataFrame({
    'sensor': [1.7, 2.3, 3.4, np.nan, 4.6, 4.8, np.nan, np.nan, np.nan, np.nan]
})

n_steps = 3
sequence = df_sensorRefill['sensor'].to_list()
X, y = split_sequence(sequence, n_steps)

# 清理含NaN的行
keep_rows = ~(np.isnan(X).any(axis=1) | np.isnan(y))
X_clean = X[keep_rows]
y_clean = y[keep_rows]

# 验证结果
for x_row, y_val in zip(X_clean, y_clean):
    print(x_row, y_val)

输出结果

运行后会得到你期望的干净数据:

[1.7 2.3 3.4] 4.2
[2.3 3.4 4.2] 4.6
[4.2 4.6 4.8] 4.6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:30:47