【问题标题】:Dropnans from a list of numpy arrays in pythonpython中numpy数组列表中的Dropnans
【发布时间】:2026-01-27 22:45:01
【问题描述】:

我想从几个 numpy 数组中删除包含所有 nan 值的行和列。 当我只有一个形状为 (101,101) 的数组时,这是我的代码:

    array=array[:,~np.all(np.isnan(array), axis=0)] 
    array=array[~np.all(np.isnan(array), axis=1),:]

我的第一次尝试是创建一个包含数组列表的 for 循环:

    my_list=[array1,array2,array3,array4,array5]

    for array in my_list:
       array=array[:,~np.all(np.isnan(array), axis=0)]
       array=array[~np.all(np.isnan(array), axis=1),:]

但它根本不起作用。有任何想法吗? 提前谢谢你

【问题讨论】:

标签: python arrays numpy for-loop nan


【解决方案1】:

您可以使用下面的代码:

my_list = [array1,array2,array3,array4,array5]
my_list = my_list[~np.isnan(my_list)]

【讨论】:

  • 此解决方案发生错误:“TypeError: 输入类型不支持 ufunc 'isnan',根据转换规则 ''safe' 无法安全地将输入强制转换为任何支持的类型'"
  • @GonzaloVelardeRodriquez 检查这个答案 *.com/questions/52657223/… 认为你必须检查数据类型
【解决方案2】:

我找到了这个最终答案:

 my_list=[array1,array2,array3,array4,array5]
 my_new_list=[]
 for arr in my_list:
    rows_nan=np.where(np.isnan(arr).all(axis=0))
    new_arr=np.delete(arr,rows_nan,axis=0)
    cols_nan=np.where(np.isnan(arr).all(axis=1))
    new_arr=np.delete(new_arr,cols_nan,axis=1)
    my_new_list.append(new_arr)

array1,array2,array3,array4,array5=my_new_list

【讨论】: