Pandas DataFrame で NaN 値を持つ列を削除する方法は 2 つあります。

(1)少なくとも1つのNaNを含む列を削除します。

df.dropna(axis='columns', inplace=True)

(2)すべての値がNaNである列を削除します。

df.dropna(axis='columns', how='all', inplace=True)

デモンストレーションのために、次の 5 つの列を持つ DataFrame を作成しましょう。

  • 3つの列にはNaN値が含まれます
  • 2列にはNaN値は含まれません

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'],
        'Column_E': [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]
        }

df = pd.DataFrame(data)

print(df)

ご覧のとおり、3 つの列 (「Column_A」、「Column_C」、「Column_E」) には NaN 値が含まれています。

Pandas DataFrame で NaN 値を持つ列を削除する 1

最終的な目標は、上記の DataFrame 内の NaN 値を持つ列を削除することです。

(1)少なくとも1つのNaNを含む列を削除する

次のテンプレートを使用して、少なくとも 1 つの NaN を含む列を削除できます。

df.dropna(axis='columns', inplace=True)

私たちの例:

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'],
        'Column_E': [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]
        }

df = pd.DataFrame(data)

df.dropna(axis='columns', inplace=True)

print(df)

コードを実行すると、元々NaN値を含んでいた3つの列が削除されていることがわかります。NaN値を含まない残りの2つの列のみが保持されています。

Pandas DataFrame で NaN 値を持つ列を削除する 2

(2)すべての値がNaNである列を削除する

すべての値が NaN である列だけを削除したい場合はどうすればよいでしょうか?

その場合、以下のテンプレートを使用してこの目標を達成できます。

df.dropna(axis='columns', how='all', inplace=True)

使用できるコードは次のとおりです。

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'],
        'Column_E': [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]
        }

df = pd.DataFrame(data)

df.dropna(axis='columns', how='all', inplace=True)

print(df)

お気づきかもしれませんが、「Column_E」(NaN 値のみを含む)は削除されました。

Pandas DataFrame で NaN 値を持つ列を削除する 3