保留NaN值并删除非缺失值
我有一个数据表(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()]