読者です 読者をやめる 読者になる 読者になる

<Python, pandas> Nanのある行を選択する。Nanない行を選択する。

pandas Python

Nanのある行、ない行を選択する。
.isnull().dropna()
お互いが逆だが、返す値がちと違う。

まずは、Nanのある行を選択。

In [31]: import pandas as pd

In [32]: import numpy as np

In [33]: df = pd.DataFrame({'a':[1,2,np.nan,3,4],'b':[np.nan,2,3,np.nan,5]})

In [34]: df
Out[34]: 
    a   b
0   1 NaN
1   2   2
2 NaN   3
3   3 NaN
4   4   5

In [35]: df.isnull()
Out[35]: 
       a      b
0  False   True
1  False  False
2   True  False
3  False   True
4  False  False

と、boolで返る。
また、下記でも同じ。

In [36]: pd.isnull(df)
Out[36]: 
       a      b
0  False   True
1  False  False
2   True  False
3  False   True
4  False  False

で、2列を.any(axis=1)で1つに固めて、

In [37]: df.isnull().any(axis=1)
Out[37]: 
0     True
1    False
2     True
3     True
4    False
dtype: bool

で、データフレームDataFrameに渡す。

In [38]: df[df.isnull().any(axis=1)]
Out[38]: 
    a   b
0   1 NaN
2 NaN   3
3   3 NaN

なるほど。 あと、その逆の.dropna()

In [39]: df.dropna()
Out[39]: 
   a  b
1  2  2
4  4  5

In [40]: df.dropna(subset=['a'])
Out[40]: 
   a   b
0  1 NaN
1  2   2
3  3 NaN
4  4   5

Stackoverflow

stackoverflow.com

マニュアル

pandas.isnull — pandas 0.17.1 documentation