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 値が含まれていることに注意してください。

Pandas DataFrame で NaN 値を持つすべての列を検索する 1

ステップ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 が含まれていることを意味します。

Pandas DataFrame で NaN 値を持つすべての列を検索する 2

あるいは、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 値を持つすべての列を検索する 3

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 つの列がすべて取得されます。

Pandas DataFrame で NaN 値を持つすべての列を検索する 4

オプションで、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 つの列が取得されます。

Pandas DataFrame で NaN 値を持つすべての列を検索する 4