我有一个 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()
相反的东西?
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()]
不是OP所要求的,但如果你在这里是为了
df.dropna()
的逆,那么df.keepna()
的等价物将是:
df[~df.index.isin(df.dropna().index)]
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
不幸的是,如果您正在考虑应用 isnull 操作后的单元格操作,则顶级解决方案不起作用。具有干净索引的正确数据帧设置是:
data = data[data['opinion'].isnull()].reset_index()