如果行= nan
或0
,我想从表格中删除所有值。
我知道有一种方法可以使用pandas进行此操作,例如pandas.dropna(how = 'all')
,但我想要一个简洁的方法来删除所有nan
或0
的行。
这是否有效实施?
答案 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 ])