保留 NaN 值并删除非缺失值

问题描述 投票:0回答:4

我有一个 DataFrame,当特定变量具有

NaN
值时,我想在其中保留行并删除非缺失值。

示例:

ticker  opinion  x1       x2  
aapl    GC       100      70  
msft    NaN      50       40  
goog    GC       40       60  
wmt     GC       45       15  
abm     NaN      80       90  

在上面的数据框中,我想删除所有不缺少意见的观察结果(因此,我想删除代码为

aapl, goog, and wmt
的行)。

pandas 有没有与

.dropna()
相反的东西?

python pandas
4个回答
43
投票

在列上使用

pandas.Series.isnull
查找缺失值并为结果建立索引。

import pandas as pd

data = pd.DataFrame({'ticker': ['aapl', 'msft', 'goog'],
                     'opinion': ['GC', nan, 'GC'],
                     'x1': [100, 50, 40]})

data = data[data['opinion'].isnull()]

4
投票

不是OP所要求的,但如果你在这里是为了

df.dropna()
的逆,那么
df.keepna()
的等价物将是:

df[~df.index.isin(df.dropna().index)]

2
投票

您也可以使用

query
:

In [4]: df.query('opinion != opinion')
Out[4]: 
  ticker opinion  x1  x2
1   msft     NaN  50  40
4    abm     NaN  80  90

这是因为 NaN 不等于 NaN:

In [5]: np.nan != np.nan
Out[5]: True

0
投票

不幸的是,如果您正在考虑应用 isnull 操作后的单元格操作,则顶级解决方案不起作用。具有干净索引的正确数据帧设置是:

data = data[data['opinion'].isnull()].reset_index()
© www.soinside.com 2019 - 2024. All rights reserved.