簡體   English   中英

帶有子集的 Pandas dropna 的 Numpy 版本 - 如果我的數組中的最后一列包含 NaN,則嘗試刪除行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM