HOWTO · Pandas

Pandas の DataFrame で 2 列のテキストを組み合わせる方法

pandas ライブラリの '+' 演算子、apply()、map()、str.cat()、agg() メソッドを使用して DataFrame の列を組み合わせる

このページの内容

Pandas の DataFrame で 2 列のテキストを組み合わせるのは簡単です。2 つの Series を間にスペースを入れて加算し、その結果を新しい列に代入します。
これにより、名と姓の各ペアが元の行と揃ったままになります。

import pandas as pd

data = [["Ali", "Azmat", "30"], ["Sharukh", "Khan", "40"], ["Linus", "Torvalds", "70"]]
df = pd.DataFrame(data, columns=["First", "Last", "Age"])
df["Full Name"] = df["First"] + " " + df["Last"]
print(df)
     First      Last Age       Full Name
0      Ali     Azmat  30       Ali Azmat
1  Sharukh      Khan  40    Sharukh Khan
2    Linus  Torvalds  70  Linus Torvalds

この例では、以下に示す Full Name 列が生成されます。5 つのメソッドはすべて同じ入力を使用し、同じ値を生成します。文字列を直接連結する場合は + または Series.str.cat() を選択してください。行関数を使うことで変換を表現しやすくなる場合は、行単位のメソッドを使用してください。

+ 演算子のメソッド

文字列の列については、+ は行ごとに値を連結します。区切り文字は通常の文字列であるため、目的の形式に合わせて " " を ", " や別の区切り文字に変更してください。この演算子は数値の加算もサポートしているため、データ型が一致しているだけではテキスト連結の操作にはなりません。ここで使用するのは、First と Last に文字列が含まれているためです。

import pandas as pd

data = [["Ali", "Azmat", "30"], ["Sharukh", "Khan", "40"], ["Linus", "Torvalds", "70"]]
df = pd.DataFrame(data, columns=["First", "Last", "Age"])
df["Full Name"] = df["First"] + " " + df["Last"]
print(df)

結果の DataFrame は次のとおりです。

     First      Last Age       Full Name
0      Ali     Azmat  30       Ali Azmat
1  Sharukh      Khan  40    Sharukh Khan
2    Linus  Torvalds  70  Linus Torvalds

Series.map() メソッド

Series.map() は、1 つの Series の各値にマッピングを適用します。これは DataFrame.map() の呼び出しではなく、すでに文字列であるこれらの名前を str で変換する必要はありません。この例では、マッピングされた Series を別の列と組み合わせる方法を示すために、その変換を保持しています。値が混在している場合は、変換する前に、欠損値と文字列でない値をどのように表現するかを明示的に決めてください。

import pandas as pd

data = [["Ali", "Azmat", "30"], ["Sharukh", "Khan", "40"], ["Linus", "Torvalds", "70"]]
df = pd.DataFrame(data, columns=["First", "Last", "Age"])
df["Full Name"] = df["First"].map(str) + " " + df["Last"]
print(df)

結果の DataFrame は次のとおりです。

     First      Last Age       Full Name
0      Ali     Azmat  30       Ali Azmat
1  Sharukh      Khan  40    Sharukh Khan
2    Linus  Torvalds  70  Linus Torvalds

df.apply() メソッド

apply は、axis=1 を渡すと、各行に対して関数を 1 回呼び出すことができます。First と Last のみを選択することで、Age を結合対象から外すことができます。文字列の join 操作は、選択された各値が文字列であることを想定しています。均一でないデータに使用する前に、欠損値と文字列でない値を意図的に変換または処理してください。2 列のテキストの間の単純な区切り文字については、+ または Series.str.cat() の方が通常は直接的です。

import pandas as pd

data = [["Ali", "Azmat", "30"], ["Sharukh", "Khan", "40"], ["Linus", "Torvalds", "70"]]
df = pd.DataFrame(data, columns=["First", "Last", "Age"])
df["Full Name"] = df[["First", "Last"]].apply(" ".join, axis=1)
print(df)

結果の DataFrame は次のとおりです。

     First      Last Age       Full Name
0      Ali     Azmat  30       Ali Azmat
1  Sharukh      Khan  40    Sharukh Khan
2    Linus  Torvalds  70  Linus Torvalds

Series.str.cat() メソッド

Series.str.cat() は文字列値を連結するために設計されており、sep で区切り文字を明示します。デフォルトでは、どちらかの Series に欠損値があると、その行の結果も欠損になります。欠損値の代替が欲しい場合は na_rep を設定し、その代替はデータの意味に合うものを選んでください。

import pandas as pd

data = [["Ali", "Azmat", "30"], ["Sharukh", "Khan", "40"], ["Linus", "Torvalds", "70"]]
df = pd.DataFrame(data, columns=["First", "Last", "Age"])
df["Full Name"] = df["First"].str.cat(df["Last"], sep=" ")
print(df)

結果の DataFrame は次のとおりです。

     First      Last Age       Full Name
0      Ali     Azmat  30       Ali Azmat
1  Sharukh      Khan  40    Sharukh Khan
2    Linus  Torvalds  70  Linus Torvalds

df.agg() メソッド

agg も、axis=1 と " ".join のような関数が渡されると、行単位の結合を適用できます。apply の例と同様に、選択された 2 列に対して動作し、それらの値が文字列であることを想定しています。集計がすでに行単位の処理の一部である場合に使用してください。この単純なタスクについては、+ 演算子または Series.str.cat() の方が意図を直接的に伝えます。コードを自分のデータに適合させるときは、結果の Full Name 列と数行を確認してください。

import pandas as pd

data = [["Ali", "Azmat", "30"], ["Sharukh", "Khan", "40"], ["Linus", "Torvalds", "70"]]
df = pd.DataFrame(data, columns=["First", "Last", "Age"])
df["Full Name"] = df[["First", "Last"]].agg(" ".join, axis=1)
print(df)

結果の DataFrame は次のとおりです。

     First      Last Age       Full Name
0      Ali     Azmat  30       Ali Azmat
1  Sharukh      Khan  40    Sharukh Khan
2    Linus  Torvalds  70  Linus Torvalds