保留NaN值并删除非缺失值

34 投票
3 回答
37024 浏览
提问于 2025-04-18 18:05

我有一个数据表(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  

在上面的数据表中,我想删除所有意见不缺失的记录(也就是说,我想删除那些ticker是aapl, goog, 和 wmt的行)。

在pandas里,有没有什么方法可以做到和.dropna()相反的操作呢?

3 个回答

1

另外,你可以使用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
4

虽然这不是提问者想要的内容,但如果你在这里是为了寻找df.dropna()的反向操作,也就是想要保留那些有缺失值的数据,类似于df.keepna(),可以使用以下代码:

df[~df.index.isin(df.dropna().index)]
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()]

撰写回答