如果行= nan
或0
,我想刪除表中的所有值。Numpy:刪除全部爲0或0的值
我知道有一種方法可以做到這一點使用大熊貓即pandas.dropna(how = 'all')
但我想一個numpy的方法與所有nan
或0
刪除行。
這是否有效實施?
如果行= nan
或0
,我想刪除表中的所有值。Numpy:刪除全部爲0或0的值
我知道有一種方法可以做到這一點使用大熊貓即pandas.dropna(how = 'all')
但我想一個numpy的方法與所有nan
或0
刪除行。
這是否有效實施?
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]
因爲我不熟悉numpy,我認爲'[foo]'是一個就地刪除操作符。 Jaime的文章清楚地表明,這會創建一個需要重新分配的新陣列。 – Annan
這將刪除這些都是零的所有行,或所有的NaN:
mask = np.all(np.isnan(arr), axis=1) | np.all(arr == 0, axis=1)
arr = arr[~mask]
,這將刪除這些都是零或NaN的所有行:
mask = np.all(np.isnan(arr) | arr == 0, axis=1)
arr = arr[~mask]
我像這種方法
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.]])
另外:如果你想刪除的行,如果行有一個男或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.]])
第一個似乎是最好的選擇。 – Black