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)
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)
-
列を削除する一番良い方法は? →
df.drop(columns=['col'])が最も安全で読みやすいです。 -
複数の列をまとめて削除できますか? →
drop(columns=['col1', 'col2'])のようにリストで指定できます。 -
条件で列を削除することはできますか? →
dropna(how='all', axis=1)やdf.loc[:, df.notna().any()]などで可能です。
