Python的大熊猫如何选择没有明确列出列从一个数据帧的一个或多个空行?(Python Pandas

2019-07-18 01:39发布

我有〜300K行〜40列的数据帧。 我想找出是否有任何行包含空值 - 并把这些“null' - 行到一个单独的数据帧,这样我可以轻松地探索他们。

我可以明确地创建遮罩:

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]]

是否有这样做(在他们的空值定位行)的更优雅的方式?

Answer 1:

[更新以适应现代pandas ,其具有isnull作为一个方法DataFrame秒。]

您可以使用isnullany建立一个布尔系列,并用它来索引你的框架:

>>> 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


Answer 2:

nans = lambda df: df[df.isnull().any(axis=1)]

那么当你永远需要它,你可以键入:

nans(your_dataframe)


文章来源: Python Pandas How to select rows with one or more nulls from a DataFrame without listing columns explicitly?