Skip to content

Pandas DataFrameで列を削除する方法(2025年版)

Updated on

データ分析や前処理の中で、不要な列を削除する作業は非常に頻繁に行われます。
特に Pandas 2.x 以降は Copy-on-Write(CoW)などの仕組みが導入され、より安全で明示的な書き方が推奨されるようになりました。

この記事では、日本語ユーザー向けに以下の内容を分かりやすく解説します:

  • drop() を使った列削除(最も一般的・推奨)
  • 複数列の削除
  • インデックスによる列削除
  • 条件による列削除(例:NaN しかない列)
  • 2025年のベストプラクティス

🔍 コードを書かずに DataFrame を可視化したい方へ

PyGWalker(ピージーウォーカー) は、Pandas / Polars DataFrame を
Tableau風インターフェースで分析できるオープンソースライブラリです。

Jupyter Notebook 上で即座に EDA(探索的データ分析)ができ、データ理解が圧倒的に速くなります。

👉 GitHub: https://github.com/Kanaries/pygwalker (opens in a new tab)

PyGWalker for Data visualization (opens in a new tab)


Pandas DataFrameとは?

  • 行(row)列(column) を持つ 2 次元データ構造
  • 列は Series(1 次元の配列)
  • 行・列インデックスで素早くアクセス可能
  • 前処理・変換・集計・可視化など豊富な機能を提供

1. drop() メソッドで列を削除する(最も推奨)

drop()columns= を指定する書き方が、2025年時点で最も読みやすく安全です。

import pandas as pd
 
data = {
    'name': ['Alex', 'Bob', 'Clarke', 'David'],
    'age': [20, 25, 19, 18],
    'city': ['New York', 'Paris', 'London', 'Tokyo']
}
 
df = pd.DataFrame(data)
 
# 'city' 列を削除
df = df.drop(columns=['city'])
print(df)

出力:

     name  age
0    Alex   20
1     Bob   25
2  Clarke   19
3   David   18

💡 axis=1 も従来通り使えますが、columns=[...] がより明示的でおすすめです。


2. 複数の列をまとめて削除する

df = df.drop(columns=['city', 'occupation'])

3. 列インデックスで削除する

列名が分からない場合や動的に処理したい場合に便利です。

df = df.drop(columns=[df.columns[2]])

4. 条件に基づいて列を削除する(例:全てが NaN の列)

import numpy as np
 
data = {
    'name': ['Alex', 'Bob', 'Clarke', 'David'],
    'age': [20, 25, 19, 18],
    'city': [np.nan, np.nan, np.nan, np.nan],
    'occupation': ['Engineer', 'Doctor', 'Artist', 'Lawyer']
}
 
df = pd.DataFrame(data)
 
# 全ての値が NaN の列を削除
df = df.dropna(axis=1, how='all')
print(df)

出力:

     name  age occupation
0    Alex   20   Engineer
1     Bob   25     Doctor
2  Clarke   19     Artist
3   David   18     Lawyer

👍 最新の書き方 NaN を含むかどうかで列をフィルタする方法として、以下も良く使われます:

df = df.loc[:, df.notna().any()]

5. del df['col'] による削除(非推奨)

del df['city']

確かに機能しますが:

  • エラー発生時のデバッグが難しい
  • メソッドチェーンとの相性が悪い
  • Pandas 2.x では徐々に非推奨方向

という理由で、可能な限り drop() を使うべきです。


結論

Pandas で列を削除する際、2025年時点でのベストプラクティスは以下の通りです:

  • df.drop(columns=['colname']) を使う
  • ✔ 複数列はリストでまとめて指定
  • ✔ 条件削除は dropna() または notna() を活用
  • del df[...] は特殊ケース以外では避ける

列削除が正しくできると、データ前処理の精度と効率が一気に向上します。


よくある質問(FAQ)

  1. 列を削除する一番良い方法は?df.drop(columns=['col']) が最も安全で読みやすいです。

  2. 複数の列をまとめて削除できますか?drop(columns=['col1', 'col2']) のようにリストで指定できます。

  3. 条件で列を削除することはできますか?dropna(how='all', axis=1)df.loc[:, df.notna().any()] などで可能です。