Pandasで全て欠損値(NaN)の行を除く

特定のカラムを除いた後にすべて欠損値の行ができてしまうと後の解析でエラーを吐く可能性があるので取り除いておきたい場合がある。

frame.ix[frame.notnull().any(axis=1), :]

を使う。
isnull(), notnull()の出力を、all(), any()をaxisとともに組み合わせて他にも色々できる。

>>> import pandas as pd
>>> import numpy as np
>>> a = np.array([[np.nan, np.nan], [np.nan, 1.0], [0.0, 0.5]])
>>> frame = pd.DataFrame(data=a, index=[0,1,2], columns=[0,1])
>>> frame
     0    1
0  NaN  NaN
1  NaN  1.0
2  0.0  0.5
>>> frame.isnull()
       0      1
0   True   True
1   True  False
2  False  False
>>> frame.notnull()
       0      1
0  False  False
1  False   True
2   True   True
>>> frame.notnull().any(axis=1)
0    False
1     True
2     True
dtype: bool
>>> frame.ix[frame.notnull().any(axis=1), :]
     0    1
1  NaN  1.0
2  0.0  0.5

追記:
strが含まれていると、型がうまく反映されず、np.nanが"nan"になってしまうことがある。
この場合isnull()がすべてFalseを吐く。以下のようにアドホックに置換するのが一つの解。

df.replace("nan", np.nan).isnull()

以下検証。

>>> a = np.array([[np.nan, np.nan],[np.nan, 1],[1,1]])
>>> df = pd.DataFrame(data=a, index=[0,1,2], columns=[0,1])
>>> df.isnull()
       0      1
0   True   True
1   True  False
2  False  False
>>> a = np.array([[np.nan, np.nan],[np.nan, "aaa"],["aaa","aaa"]])
>>> df = pd.DataFrame(data=a, index=[0,1,2], columns=[0,1])
>>> df.isnull()
       0      1
0  False  False
1  False  False
2  False  False
>>> df
     0    1
0  nan  nan
1  nan  aaa
2  aaa  aaa
>>> df.replace("nan", np.nan)
     0    1
0  NaN  NaN
1  NaN  aaa
2  aaa  aaa
>>> df.replace("nan", np.nan).isnull()
       0      1
0   True   True
1   True  False
2  False  False