HOWTO · Pandas
如何在 Pandas 的 DataFrame 中合併兩列文字
在 pandas 庫中使用 '+' 運算子、apply()、map()、str.cat()、agg() 方法在 DataFrame 中合併列
本頁內容
在 Pandas DataFrame 中合併兩列文字很簡單:將兩個 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 列。五種方法使用相同的輸入並產生相同的值。直接串接字串時請選擇 + 或 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() 會對一個 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 時,可以對每一行呼叫一次函數。僅選取 First 和 Last 可讓 Age 不參與合併。字串 join 操作預期每個選取的值都是字串;在將其用於較不均勻的資料之前,請有意識地轉換或處理缺失值和非字串值。對於兩列文字之間的簡單分隔符,+ 或 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 範例一樣,它作用於選取的兩列,並預期它們的值為字串。當聚合已經是您逐行處理的一部分時,請使用它;對於這個簡單任務,+ 運算子或 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