代码之家  ›  专栏  ›  技术社区  ›  Black

Numpy:删除所有nan或0值的行

  •  23
  • Black  · 技术社区  · 12 年前

    如果行= nan 0 .

    我知道有一种方法可以用熊猫来做到这一点,即 pandas.dropna(how = 'all') 但我希望使用numpy方法删除所有 0 .

    是否有有效的实施?

    5 回复  |  直到 12 年前
        1
  •  27
  •   HYRY    12 年前
    import numpy as np
    
    a = np.array([
        [1, 0, 0],
        [0, np.nan, 0],
        [0, 0, 0],
        [np.nan, np.nan, np.nan],
        [2, 3, 4]
    ])
    
    mask = np.all(np.isnan(a) | np.equal(a, 0), axis=1)
    a[~mask]
    
        2
  •  8
  •   Jaime    12 年前

    这将删除所有全为零或全为nan的行:

    mask = np.all(np.isnan(arr), axis=1) | np.all(arr == 0, axis=1)
    arr = arr[~mask]
    

    这将删除所有0或nan的行:

    mask = np.all(np.isnan(arr) | arr == 0, axis=1)
    arr = arr[~mask]
    
        3
  •  4
  •   Greg    8 年前

    此外:如果某行在任何单个值中有nan或0,则要删除行

    a = np.array([
        [1, 0, 0],
        [1, 2, np.nan],
        [np.nan, np.nan, np.nan],
        [2, 3, 4]
    ])
    
    mask = np.any(np.isnan(a) | np.equal(a, 0), axis=1)
    a[~mask]
    

    输出

    array([[ 2.,  3.,  4.]])
    
        4
  •  3
  •   JaminSore    12 年前

    我喜欢这种方法

    import numpy as np
    
    arr = np.array([[ np.nan,  np.nan],
                    [ -1.,  np.nan],
                    [ np.nan,  -2.],
                    [ np.nan,  np.nan],
                    [ np.nan,   0.]])
    mask = (np.nan_to_num(arr) != 0).any(axis=1)
    

    输出:

    >>> arr[mask]
    ... array([[ -1.,  nan],
              [ nan,  -2.]])
    
        5
  •  0
  •   Nino Filiu    6 年前

    列表理解可以用作一行。

    >> a = array([65.36512 , 39.98848 , 28.25152 , 37.39968 , 59.32288 , 40.85184 ,
           71.98208 , 41.7152  , 33.71776 , 38.5504  , 21.34656 , 37.97504 ,
           57.5968  , 30.494656, 80.03776 , 33.94688 , 37.45792 , 27.617664,
           15.59296 , 27.329984, 45.2256  , 61.27872 , 57.8848  , 87.4592  ,
           34.29312 , 85.15776 , 46.37696 , 79.11616 ,       nan,       nan])
    
    >> np.array([i for i in a if np.isnan(i)==False])
    
    array([65.36512 , 39.98848 , 28.25152 , 37.39968 , 59.32288 , 40.85184 ,
           71.98208 , 41.7152  , 33.71776 , 38.5504  , 21.34656 , 37.97504 ,
           57.5968  , 30.494656, 80.03776 , 33.94688 , 37.45792 , 27.617664,
           15.59296 , 27.329984, 45.2256  , 61.27872 , 57.8848  , 87.4592  ,
           34.29312 , 85.15776 , 46.37696 , 79.11616 ])