あちこちに散らばっている(多分)NaN値を含むパンダデータフレームを考えます。
質問:どの列にNaN値が含まれているのかを判断するにはどうすればよいですか。特に、NaNを含む列名のリストを取得できますか?
ありがとうございました
更新:Pandas 0.22.0を使用
新しいPandasバージョンは新しいメソッド 'DataFrame.isna()' と 'DataFrame.notna()' を持っています
In [71]: df
Out[71]:
a b c
0 NaN 7.0 0
1 0.0 NaN 4
2 2.0 NaN 4
3 1.0 7.0 0
4 1.0 3.0 9
5 7.0 4.0 9
6 2.0 6.0 9
7 9.0 6.0 4
8 3.0 0.0 9
9 9.0 0.0 1
In [72]: df.isna().any()
Out[72]:
a True
b True
c False
dtype: bool
列のリストとして:
In [74]: df.columns[df.isna().any()].tolist()
Out[74]: ['a', 'b']
それらの列を選択するには(少なくとも1つのNaN
値を含む):
In [73]: df.loc[:, df.isna().any()]
Out[73]:
a b
0 NaN 7.0
1 0.0 NaN
2 2.0 NaN
3 1.0 7.0
4 1.0 3.0
5 7.0 4.0
6 2.0 6.0
7 9.0 6.0
8 3.0 0.0
9 9.0 0.0
古い答え:
isnull() を使ってみてください。
In [97]: df
Out[97]:
a b c
0 NaN 7.0 0
1 0.0 NaN 4
2 2.0 NaN 4
3 1.0 7.0 0
4 1.0 3.0 9
5 7.0 4.0 9
6 2.0 6.0 9
7 9.0 6.0 4
8 3.0 0.0 9
9 9.0 0.0 1
In [98]: pd.isnull(df).sum() > 0
Out[98]:
a True
b True
c False
dtype: bool
@rootがより明確なバージョンを提案したように:
In [5]: df.isnull().any()
Out[5]:
a True
b True
c False
dtype: bool
In [7]: df.columns[df.isnull().any()].tolist()
Out[7]: ['a', 'b']
サブセットを選択する - 少なくとも1つのNaN
値を含むすべての列
In [31]: df.loc[:, df.isnull().any()]
Out[31]:
a b
0 NaN 7.0
1 0.0 NaN
2 2.0 NaN
3 1.0 7.0
4 1.0 3.0
5 7.0 4.0
6 2.0 6.0
7 9.0 6.0
8 3.0 0.0
9 9.0 0.0
df.isnull().sum()
を使うことができます。すべての列と各機能の合計NaNが表示されます。
画面で視覚的に検査するために多くの列を必要とするという問題があったので、問題のある列をフィルタリングして返す短いリストコンプは
nan_cols = [i for i in df.columns if df[i].isnull().any()]
それが誰かに役立つなら
これらの3行のコードを使用して、少なくとも1つのNULL値を含む列名を出力します。
for column in dataframe:
if dataframe[column].isnull().any():
print('{0} has {1} null values'.format(column, dataframe[column].isnull().sum()))
どちらもうまくいくはずです。
df.isnull().sum()
df.isna().sum()
DataFrameメソッドのisna()
またはisnull()
は完全に同一です。
注:空の文字列''
はFalseと見なされます(NAとは見なされません)