【问题标题】:How to remove all rows in a numpy.ndarray that contain non-numeric values如何删除 numpy.ndarray 中包含非数字值的所有行
【发布时间】:2012-07-12 06:43:47
【问题描述】:

基本上,我正在做一些数据分析。我以 numpy.ndarray 的形式读取数据集,但其中一些值丢失(要么只是不存在,要么是 NaN,要么是写成“NA”的字符串)。

我想清除所有包含此类条目的行。如何使用 numpy ndarray 做到这一点?

【问题讨论】:

    标签: python numpy


    【解决方案1】:
    >>> a = np.array([[1,2,3], [4,5,np.nan], [7,8,9]])
    array([[  1.,   2.,   3.],
           [  4.,   5.,  nan],
           [  7.,   8.,   9.]])
    
    >>> a[~np.isnan(a).any(axis=1)]
    array([[ 1.,  2.,  3.],
           [ 7.,  8.,  9.]])
    

    并将其重新分配给a

    解释:np.isnan(a) 返回一个与True 类似的数组,其中NaNFalse 在别处。 .any(axis=1)m*n 数组减少为 n,并对整行进行逻辑 or 操作,~ 反转 True/Falsea[ ] 仅从原始数组中选择行,这些行具有 True括号内。

    【讨论】:

    • np.isfinite 在这种情况下也很有用,以及当您想摆脱 ±Inf 值时。它不需要~,因为它只对有限实数返回true。
    • @naught101 您还需要将any 更改为all。由于您要选择“所有都是有限的”的行,而不是选择“不是任何都是 nan”的行。
    猜你喜欢
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2016-12-16
    • 2019-08-21
    • 2014-10-04
    相关资源
    最近更新 更多