Pandas中dropna()的相反操作是什么?

16

我有一个 pandasDataFrame,我想把其中没有缺失值的观测值和有缺失值的观测值分开。我可以使用 dropna() 来获取没有缺失值的行。那么有没有相应的 analong 可以获得具有缺失值的行呢?

我有一个 pandasDataFrame,我想把其中没有缺失值的观测值和有缺失值的观测值分开。我可以使用 dropna() 来获取没有缺失值的行。那么有没有相应的方法可以获得具有缺失值的行呢?

#Example DataFrame
import pandas as pd
df = pd.DataFrame({'col1': [1,np.nan,3,4,5],'col2': [6,7,np.nan,9,10],})

#Get observations without missing values
df.dropna()
3个回答

31

按行检查null值并使用布尔索引进行过滤:

df[df.isnull().any(1)]

#  col1 col2
#1  NaN  7.0
#2  3.0  NaN

4
如果你非常关心性能,可以使用 df[np.isnan(df.values).any(1)] - ndarray 和 DataFrame 在 any 函数性能上的差异对我来说一直很明显。 - miradulo

9

~ = 相反的 :-)

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

Out[234]: 
   col1  col2
1   NaN   7.0
2   3.0   NaN

或者
df.loc[df.index.difference(df.dropna().index)]
Out[235]: 
   col1  col2
1   NaN   7.0
2   3.0   NaN

2

我将以下表达式作为dropna的相反方式使用。在这种情况下,它基于指定的列保留空值行。任何有值的都不被保留。

csv_df = csv_df.loc[~csv_df['Column_name'].notna(), :]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接