[英]Numpy version of Pandas dropna with subset - trying to remove rows if the last column in my array contains NaN
如果某列(即數組中的最后一列)包含 NaN,我正試圖從 numpy 數組中刪除行。 其他列中的 NaN 值是可以接受的,但不是最后一列。
我知道這可以通過轉換為熊貓數據df.dropna(subset=['lastcolumn'])
並使用df.dropna(subset=['lastcolumn'])
。 我想知道是否可以在 numpy 中執行此操作,因為轉換為 Pandas 並使用 dropna 非常慢。
像這樣的事情可能會奏效:
In [1856]: import numpy as np
In [1857]: a = np.array([[1,2,3], [4,5,np.nan], [7,8,9]])
In [1858]: a
Out[1858]:
array([[ 1., 2., 3.],
[ 4., 5., nan],
[ 7., 8., 9.]])
In [1859]: a[~np.isnan(a).any(axis=1)]
Out[1859]:
array([[1., 2., 3.],
[7., 8., 9.]])
編輯
如果只需要從特定列中刪除NaN
,則需要:
In [1870]: a[~np.isnan(a[:, 1:2]).any(axis=1)]
Out[1870]:
array([[ 4., 5., nan],
[ 7., 8., 9.]])
這將僅從前兩列中刪除NaN
。
使用np.isnan()
有效,但需要指定哪一列不能有 NaN:
a = np.array([[1,np.nan,3], [4,5,np.nan], [7,8,9]])
print(a)
[[1.0000 nan 3.0000]
[4.0000 5.0000 nan]
[7.0000 8.0000 9.0000]]
b = a[~np.isnan(a[:,2:3]).any(axis=1)]
print(b)
[[1.0000 nan 3.0000]
[7.0000 8.0000 9.0000]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.