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

时间:2014-02-26 05:32:52

标签: python numpy pandas

如果行= nan0,我想从表格中删除所有值。

我知道有一种方法可以使用pandas进行此操作,例如pandas.dropna(how = 'all'),但我想要一个简洁的方法来删除所有nan0的行。

这是否有效实施?

5 个答案:

答案 0 :(得分:19)

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]

答案 1 :(得分:6)

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

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

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

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

答案 2 :(得分:3)

此外:如果要在任何单个值中具有nan或0的行

,则要删除行
@Injectable()
export class ExampleService{
    getData(): Observable<DataType>{ return http.recurringGET(); }
    doStuffOnData(): Observable<boolean>{ http.reissueGET(); }
}

输出

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]

答案 3 :(得分:2)

我喜欢这种方法

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.]])

答案 4 :(得分:0)

列表理解可以用作一个衬里。

>> 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 ])