Pandasで「文字列を結合する」方法は、用途やデータ構造(Series同士、列同士、DataFrame全体、固定の文字列との結合など)によっていくつかやり方があります。
それぞれの代表的な方法を詳しく解説します。
目次
+
演算子を使った結合
もっともシンプルな方法は、Pythonの文字列結合と同じように +
を使う方法です。
import pandas as pd
df = pd.DataFrame({
"first": ["田中", "佐藤", "鈴木"],
"last": ["太郎", "花子", "一郎"]
})
# 文字列を単純に結合
df["full_name"] = df["first"] + df["last"]
print(df)
注意点
- 欠損値(NaN)があると結合結果も NaN になるので、欠損値がある場合は
.fillna('')
などで埋める必要があります。
区切り文字を入れて結合(str.cat()
)
名前と名字の間にスペースや記号を入れたい場合は、str.cat()
が便利です。
# 空白を挟んで結合
df["full_name"] = df["first"].str.cat(df["last"], sep=" ")
print(df)
ポイント
sep
で区切り文字を指定可能- 複数列を結合する場合は
str.cat(df[["first", "last"]], sep=" ")
のように指定
複数列をまとめて結合
str.cat()
にリストやDataFrameを渡すと、一度に複数列を結合できます。
# first, last の両方をまとめて結合
df["joined"] = df[["first", "last"]].astype(str).agg(" ".join, axis=1)
print(df)
こちらの方法は agg(" ".join, axis=1)
を使うことで、行方向に文字列を結合できます。
固定の文字列を追加して結合
列にラベルや単語を付けたい場合も簡単です。
df["greeting"] = "こんにちは " + df["first"] + "さん"
print(df)
欠損値(NaN)がある場合の結合
データに欠損が含まれる場合、+
だと NaN が伝播してしまいます。
そのときは .fillna("")
を使うのが定番です。
df2 = pd.DataFrame({
"first": ["田中", None, "鈴木"],
"last": ["太郎", "花子", None]
})
# NaN を空文字に置き換えて結合
df2["full_name"] = df2["first"].fillna("") + df2["last"].fillna("")
print(df2)
まとめ
+
演算子 → シンプルだが NaN に弱いstr.cat()
→ 区切り文字付き結合、複数列対応agg(" ".join, axis=1)
→ 行方向で柔軟に結合fillna("")
を組み合わせて NaN 対策
以上、PythonのPandasで文字列を結合する方法についてでした。
最後までお読みいただき、ありがとうございました。