Python Pandas如何从DataFrame中select具有一个或多个空值的行,而不显式列出列?

我有一个约300K行〜40列的数据框。 我想知道是否有行包含空值 – 并将这些“空”行放入一个单独的数据框中,以便我可以轻松地探索它们。

我可以明确地创build一个面具:

mask=False for col in df.columns: mask = mask | df[col].isnull() dfnulls = df[mask] 

或者我可以做一些事情:

 df.ix[df.index[(df.T == np.nan).sum() > 1]] 

有没有一个更优雅的方式来做到这一点(find空行中的行)?

[更新为适应现代pandas ,作为DataFrame的一种方法s ..]

您可以使用isnullanybuild立一个布尔系列,并使用它索引到您的框架:

 >>> df = pd.DataFrame([range(3), [0, np.NaN, 0], [0, 0, np.NaN], range(3), range(3)]) >>> df.isnull() 0 1 2 0 False False False 1 False True False 2 False False True 3 False False False 4 False False False >>> df.isnull().any(axis=1) 0 False 1 True 2 True 3 False 4 False dtype: bool >>> df[df.isnull().any(axis=1)] 0 1 2 1 0 NaN 0 2 0 0 NaN 

[对于pandas :]

你可以使用函数isnull而不是方法:

 In [56]: df = pd.DataFrame([range(3), [0, np.NaN, 0], [0, 0, np.NaN], range(3), range(3)]) In [57]: df Out[57]: 0 1 2 0 0 1 2 1 0 NaN 0 2 0 0 NaN 3 0 1 2 4 0 1 2 In [58]: pd.isnull(df) Out[58]: 0 1 2 0 False False False 1 False True False 2 False False True 3 False False False 4 False False False In [59]: pd.isnull(df).any(axis=1) Out[59]: 0 False 1 True 2 True 3 False 4 False 

导致相当紧凑:

 In [60]: df[pd.isnull(df).any(axis=1)] Out[60]: 0 1 2 1 0 NaN 0 2 0 0 NaN 
 nans = lambda df: df[df.isnull().any(axis=1)] 

那么当你需要的时候你可以input:

 nans(your_dataframe)