Pandas DataFrame で NaN 値を含むすべての列を見つける 4 つの方法を以下に示します。
(1)isna()を使ってNaN値を持つすべての列を見つけます。
df.isna().any()
(2)isnull()を使ってNaN値を持つすべての列を見つけます。
df.isnull().any()
(3)isna()を使ってNaN値を持つすべての列を選択します。
df[df.columns[df.isna().any()]]
(4) isnull()を使ってNaN値を持つすべての列を選択します。
df[df.columns[df.isnull().any()]]
Pandas DataFrame で NaN 値を持つすべての列を検索する手順
ステップ1: DataFrameを作成する
たとえば、4 つの列を持つ DataFrame を作成しましょう。
import pandas as pd
import numpy as np
data = {'Column_A': [1, 2, 3, 4, 5, np.nan, 6, 7, np.nan],
'Column_B': [11, 22, 33, 44, 55, 66, 77, 88, 99],
'Column_C': ['a', 'b', np.nan, np.nan, 'c', 'd', 'e', np.nan, 'f'],
'Column_D': ['aa', 'bb', 'cc', 'dd', 'ee', 'ff', 'gg', 'hh', 'ii']
}
df = pd.DataFrame(data)
print(df)
DataFrame の一部の列に NaN 値が含まれていることに注意してください。

ステップ2: Pandas DataFrameでNaN値を持つすべての列を検索する
isna() を使用すると、NaN 値を持つすべての列を見つけることができます。
df.isna().any()
私たちの例:
import pandas as pd
import numpy as np
data = {'Column_A': [1, 2, 3, 4, 5, np.nan, 6, 7, np.nan],
'Column_B': [11, 22, 33, 44, 55, 66, 77, 88, 99],
'Column_C': ['a', 'b', np.nan, np.nan, 'c', 'd', 'e', np.nan, 'f'],
'Column_D': ['aa', 'bb', 'cc', 'dd', 'ee', 'ff', 'gg', 'hh', 'ii']
}
df = pd.DataFrame(data)
nan_values = df.isna().any()
print(nan_values)
ご覧のとおり、「Column_A」と「Column_C」の両方の結果は「True」であり、これら 2 つの列に NaN が含まれていることを意味します。

あるいは、isnull() を使用しても同じ結果が得られます。
df.isnull().any()
完全なコードは次のとおりです。
import pandas as pd
import numpy as np
data = {'Column_A': [1, 2, 3, 4, 5, np.nan, 6, 7, np.nan],
'Column_B': [11, 22, 33, 44, 55, 66, 77, 88, 99],
'Column_C': ['a', 'b', np.nan, np.nan, 'c', 'd', 'e', np.nan, 'f'],
'Column_D': ['aa', 'bb', 'cc', 'dd', 'ee', 'ff', 'gg', 'hh', 'ii']
}
df = pd.DataFrame(data)
nan_values = df.isnull().any()
print(nan_values)
前と同様に、「Column_A」と「Column_C」の両方に NaN 値が含まれています。

Pandas DataFrame で NaN 値を持つすべての列を選択する
NaN 値を持つすべての列を選択したい場合はどうすればよいでしょうか?
その場合、次の方法を使用して、NaN を含むすべての列を選択できます。
df[df.columns[df.isna().any()]]
したがって、新しい Python コードは次のようになります。
import pandas as pd
import numpy as np
data = {'Column_A': [1, 2, 3, 4, 5, np.nan, 6, 7, np.nan],
'Column_B': [11, 22, 33, 44, 55, 66, 77, 88, 99],
'Column_C': ['a', 'b', np.nan, np.nan, 'c', 'd', 'e', np.nan, 'f'],
'Column_D': ['aa', 'bb', 'cc', 'dd', 'ee', 'ff', 'gg', 'hh', 'ii']
}
df = pd.DataFrame(data)
nan_values = df[df.columns[df.isna().any()]]
print(nan_values)
これで、NaN 値を含む 2 つの列がすべて取得されます。

オプションで、isnull() を使用して同じ結果を得ることもできます。
import pandas as pd
import numpy as np
data = {'Column_A': [1, 2, 3, 4, 5, np.nan, 6, 7, np.nan],
'Column_B': [11, 22, 33, 44, 55, 66, 77, 88, 99],
'Column_C': ['a', 'b', np.nan, np.nan, 'c', 'd', 'e', np.nan, 'f'],
'Column_D': ['aa', 'bb', 'cc', 'dd', 'ee', 'ff', 'gg', 'hh', 'ii']
}
df = pd.DataFrame(data)
nan_values = df[df.columns[df.isnull().any()]]
print(nan_values)
コードを実行すると、 NaN 値を持つ同じ 2 つの列が取得されます。
