1. ホーム
  2. パイソン

[解決済み】PandasのデータフレームでNaN値を含むカラムを見つける方法

2022-04-07 01:09:41

質問

あちこちにNaNの可能性がある値を含むpandasのデータフレームがあるとする。

質問です。 どの列がNaN値を含んでいるかを判断するにはどうすればよいですか?特に、NaNを含む列名のリストを得ることができますか?

どのように解決するのですか?

UPDATEしてください。 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


OLD answer:

を使ってみてください。 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