PythonのPandasライブラリにおける文字列の分割(split)について、基本から応用まで体系的に解説します。
特にSeries.str.split()
メソッドはデータ前処理において非常に強力で、テキスト処理やカラムの分解などで頻繁に使われます。
目次
基本:str.split()
の使い方
Pandasでは、文字列を分割するには Series.str.split()
を使います。
これはPython標準のstr.split()
に似ていますが、PandasのSeries
やDataFrame
に対して動作します。
基本構文
df['column_name'].str.split(pat=None, n=-1, expand=False)
pat
: 区切り文字(省略時は空白文字全体にマッチ)n
: 最大分割数(-1は制限なし)expand
:True
で分割後に複数列に展開(DataFrameになる)
使用例(実用的な例とともに)
カンマ区切りの文字列をリストに分割
import pandas as pd
df = pd.DataFrame({'data': ['apple,banana,grape', 'dog,cat', 'python']})
df['split'] = df['data'].str.split(',')
print(df)
出力
data split
0 apple,banana,grape [apple, banana, grape]
1 dog,cat [dog, cat]
2 python [python]
複数列に分割して展開 (expand=True
)
df_split = df['data'].str.split(',', expand=True)
print(df_split)
出力
0 1 2
0 apple banana grape
1 dog cat None
2 python None None
最大分割数を指定(n=1
)
df['first_rest'] = df['data'].str.split(',', n=1)
print(df['first_rest'])
出力
0 [apple, banana,grape]
1 [dog, cat]
2 [python]
実用的なシナリオ例
氏名データから「姓」「名」を分離
df = pd.DataFrame({'name': ['山田 太郎', '佐藤 花子', '田中 一郎']})
df[['last_name', 'first_name']] = df['name'].str.split(' ', expand=True)
print(df)
日付や時間の文字列をパース
df = pd.DataFrame({'datetime': ['2025-07-22 12:30:45', '2025-08-01 09:15:10']})
df[['date', 'time']] = df['datetime'].str.split(' ', expand=True)
print(df)
ファイル名の拡張子を抽出
df = pd.DataFrame({'filename': ['data.csv', 'image.png', 'report.pdf']})
df[['name', 'ext']] = df['filename'].str.rsplit('.', n=1, expand=True)
print(df)
str.rsplit()
は右から分割したいときに使います(例:ファイル名やURL分割)
split vs extract の違い
str.split()
は単純な文字や文字列で分割したいときstr.extract()
は正規表現を使って複雑なパターンを抽出したいとき
例:メールからユーザー名だけ取りたい
df = pd.DataFrame({'email': ['user1@example.com', 'test2@domain.jp']})
df['username'] = df['email'].str.extract(r'(^[^@]+)')
補足:NaN
への対応
文字列が NaN
の場合は split()
はそのまま NaN
を返します。
データの欠損処理と併用することが多いです。
df = pd.DataFrame({'col': ['a,b', None, 'c,d']})
df['split'] = df['col'].str.split(',')
高度な応用:複数の文字で分割
複数の区切り文字(例えばカンマまたはセミコロン)で分割したい場合は、str.split()
ではなく正規表現ベースの分割が必要です。
import re
df = pd.DataFrame({'text': ['a,b;c', 'x;y,z']})
df['split'] = df['text'].str.split(r'[;,]')
まとめ
メソッド | 概要 |
---|---|
str.split() | 区切り文字で分割(リスト型) |
str.split(expand=True) | 分割結果を複数列として展開 |
str.rsplit() | 右から分割 |
str.extract() | 正規表現による抽出 |
str.get(n) | リストからn番目の要素を取得 |
以上、PythonのPandasでの文字列の分割についてでした。
最後までお読みいただき、ありがとうございました。