PythonのPandasで「空白(ホワイトスペース)」を削除する方法にはいくつかのバリエーションがあり、どのようなデータに対してどの種類の空白を削除したいかによって使い分ける必要があります。
以下では 用途別に丁寧に解説 していきます。
目次
文字列の前後の空白を削除する(str.strip()
)
よく使う場面
CSVファイルを読み込んだ後、「名前」や「カテゴリ」などのカラムに前後の空白が混じっている場合。
import pandas as pd
# サンプルデータフレームの作成
df = pd.DataFrame({
'名前': [' 山田', '田中 ', ' 鈴木 '],
'年齢': [28, 35, 42]
})
# 前後の空白を削除
df['名前'] = df['名前'].str.strip()
print(df)
文字列内の すべての空白 を削除する(str.replace()
)
よく使う場面
空白を一切残したくない場合(例:「郵便番号」「電話番号」など)
# 半角スペースをすべて削除(名前列)
df['名前'] = df['名前'].str.replace(' ', '', regex=False)
print(df)
注意
regex=False
を指定しないと警告が出る場合があります(Pandas 1.4以降)。- 全角スペース(
' '
)には別途対応が必要です。
全角スペースにも対応する
日本語データでは 全角スペース(\u3000や’ ’) が混在するケースが多いです。
全角+半角スペース両方を削除
# 半角と全角スペースをすべて削除
df['名前'] = df['名前'].str.replace(r'[ ]', '', regex=True)
print(df)
[ ]
:半角スペースと全角スペースの両方にマッチする正規表現です。
すべての列に一括で空白を削除したい場合
すべての文字列カラムの前後空白を削除
# 各列のデータ型がobject(文字列)の場合に前後の空白を削除
df = df.apply(lambda x: x.str.strip() if x.dtype == "object" else x)
print(df)
全列の空白を削除(列の型にかかわらず文字列に変換して削除)
# 文字列かどうかを確認し、空白を削除
df = df.applymap(lambda x: x.strip() if isinstance(x, str) else x)
print(df)
列名の空白を削除(重要:カラム名にスペースがある場合)
# 列名の前後に空白がある場合に削除
df.columns = df.columns.str.strip()
print(df.columns.tolist())
CSV読み込み後、カラム名に空白がある場合にはこれを使います。
複数スペースを1つにまとめる(空白の正規化)
# 複数の空白(半角・全角含む)を1つの半角スペースに置換し、前後の空白も削除
df['名前'] = df['名前'].str.replace(r'\s+', ' ', regex=True).str.strip()
print(df)
よくある使用例
" 山田 太郎 "
→"山田 太郎"
のように整形したいとき。
NaNや欠損値と空白の見分けについて補足
空白だけのセルを「欠損値」として扱いたいとき。
# 空白や空文字列だけのセルを NaN に変換
df = df.replace(r'^\s*$', pd.NA, regex=True)
print(df)
まとめ表:目的別おすすめメソッド
目的 | メソッド例 |
---|---|
前後の空白を削除 | .str.strip() |
全ての空白を削除 | .str.replace(' ', '') |
全角スペース含む全削除 | .str.replace(r'[ ]', '', regex=True) |
複数スペースを1つに | .str.replace(r'\s+', ' ') |
全カラム一括処理(前後空白) | df.apply(...) |
列名の空白削除 | df.columns.str.strip() |
読み込み時の空白無視 | read_csv(..., skipinitialspace=True) |
以上、PythonのPandasで空白削除する方法についてでした。
最後までお読みいただき、ありがとうございました。