Pandas DataFrame 列で単一の列を複数の列に分割する
Pandas には、文字列列またはテキスト列をダッシュ、空白、およびリストの戻り列(シリーズ
)で分割するためのよく知られた方法があります。Pandas について言えば、シリーズ
という用語はデータフレーム列と呼ばれます。
pandas Series.str.split()
関数を使用して、特定の区切り文字または区切り文字の周りの複数の列の文字列を分割できます。Python の文字列 split()
メソッドに似ていますが、Dataframe 列全体に適用されます。以下の列を区切る最も簡単な方法があります。
このメソッドは、Series
文字列を初期インデックスから分離します。
Series.str.split(pat=None, n=-1, expand=False)
このメソッドの動作を理解してみましょう
# import Pandas as pd
import pandas as pd
# innitilize Dataframe
df = pd.DataFrame(
{
"Email": [
"Alex.jhon@gmail.com",
"Hamza.Azeez@gmail.com",
"Harry.barton@hotmail.com",
],
"Number": ["+44-3844556210", "+44-2245551219", "+44-1049956215"],
"Location": ["Alameda,California", "Sanford,Florida", "Columbus,Georgia"],
}
)
print("Dataframe series:\n", df)
E メール
、番号
、場所
の 3つの列を持つデータフレーム df
を作成しました。[電子メール]列の文字列には特定のパターンがあることに注意してください。ただし、よく見ると、この列は 2つの列に分割できます。必要な問題をうまく解決します。
出力:
Dataframe series :
Email Number Location
0 Alex.jhon@gmail.com +44-3844556210 Alameda,California
1 Hamza.Azeez@gmail.com +44-2245551219 Sanford,Florida
2 Harry.barton@hotmail.com +44-1049956215 Columbus,Georgia
Series.str.split()
関数を使用して Number
列を分離し、split()
メソッドで -
を渡します。必ず True
を expand
キーワードに渡してください。
例 1:
print(
"\n\nSplit 'Number' column by '-' into two individual columns :\n",
df.Number.str.split(pat="-", expand=True),
)
この例では、シリーズ(数値)のすべての値を -
で分割します。
出力:
Split 'Number' column into two individual columns :
0 1
0 +44 3844556210
1 +44 2245551219
2 +44 1049956215
展開パラメータ Series.str.split(expand=True)
のみを使用する場合、これにより空白を分割できますが、-
と、
、または文字列に存在する場合は正規表現で区切ることはできません。pat
パラメータ。
これらの分割列の名前を変更しましょう。
df[["Dialling Code", "Cell-Number"]] = df.Number.str.split("-", expand=True)
print(df)
2つの新しいシリーズダイヤルコード
とセル番号
を作成し、番号
シリーズを使用して値を割り当てました。
出力:
Email Number Location Dialling Code \
0 Alex.jhon@gmail.com +44-3844556210 Alameda,California +44
1 Hamza.Azeez@gmail.com +44-2245551219 Sanford,Florida +44
2 Harry.barton@hotmail.com +44-1049956215 Columbus,Georgia +44
Cell-Number
0 3844556210
1 2245551219
2 1049956215
例 2:
この例では、Location
シリーズを、
で分割します。
df[["City", "State"]] = df.Location.str.split(",", expand=True)
print(df)
場所
シリーズを分割し、その値を個々のシリーズ都市
と州
に保存します。
出力:
Email Number Location City \
0 Alex.jhon@gmail.com +44-3844556210 Alameda,California Alameda
1 Hamza.Azeez@gmail.com +44-2245551219 Sanford,Florida Sanford
2 Harry.barton@hotmail.com +44-1049956215 Columbus,Georgia Columbus
State
0 California
1 Florida
2 Georgia
最後の例を見てみましょう。E メール
シリーズでフルネームを分離します。
full_name = df.Email.str.split(pat="@", expand=True)
print(full_name)
出力:
0 1
0 Alex.jhon gmail.com
1 Hamza.Azeez gmail.com
2 Harry.barton hotmail.com
ここで、名前と名前を。
で区切ります。
df[["First Name", "Last Name"]] = full_name[0].str.split(".", expand=True)
print(df)
出力:
Email Number Location First Name \
0 Alex.jhon@gmail.com +44-3844556210 Alameda,California Alex
1 Hamza.Azeez@gmail.com +44-2245551219 Sanford,Florida Hamza
2 Harry.barton@hotmail.com +44-1049956215 Columbus,Georgia Harry
Last Name
0 jhon
1 Azeez
2 barton
.split()
メソッドで expand=True
が渡された場合、n=-1
パラメータは機能しません。
print(df["Email"].str.split("@", n=-1, expand=True))
出力:
0 1
0 George Washington
1 Hamza Azeez
2 Harry Walker
サンプルコード全体を以下に示します。
# import Pandas as pd
import pandas as pd
# create a new Dataframe
df = pd.DataFrame(
{
"Email": [
"Alex.jhon@gmail.com",
"Hamza.Azeez@gmail.com",
"Harry.barton@hotmail.com",
],
"Number": ["+44-3844556210", "+44-2245551219", "+44-1049956215"],
"Location": ["Alameda,California", "Sanford,Florida", "Columbus,Georgia"],
}
)
print("Dataframe series :\n", df)
print(
"\n\nSplit 'Number' column by '-' into two individual columns :\n",
df.Number.str.split(pat="-", expand=True),
)
df[["Dialling Code", "Cell-Number"]] = df.Number.str.split("-", expand=True)
print(df)
df[["City", "State"]] = df.Location.str.split(",", expand=True)
print(df)
full_name = df.Email.str.split(pat="@", expand=True)
print(full_name)
df[["First Name", "Last Name"]] = full_name[0].str.split(".", expand=True)
print(df)
出力:
Dataframe series :
Email Number Location
0 Alex.jhon@gmail.com +44-3844556210 Alameda,California
1 Hamza.Azeez@gmail.com +44-2245551219 Sanford,Florida
2 Harry.barton@hotmail.com +44-1049956215 Columbus,Georgia
Split 'Number' column by '-' into two individual columns :
0 1
0 +44 3844556210
1 +44 2245551219
2 +44 1049956215
Email Number Location Dialling Code \
0 Alex.jhon@gmail.com +44-3844556210 Alameda,California +44
1 Hamza.Azeez@gmail.com +44-2245551219 Sanford,Florida +44
2 Harry.barton@hotmail.com +44-1049956215 Columbus,Georgia +44
Cell-Number
0 3844556210
1 2245551219
2 1049956215
Email Number Location Dialling Code \
0 Alex.jhon@gmail.com +44-3844556210 Alameda,California +44
1 Hamza.Azeez@gmail.com +44-2245551219 Sanford,Florida +44
2 Harry.barton@hotmail.com +44-1049956215 Columbus,Georgia +44
Cell-Number City State
0 3844556210 Alameda California
1 2245551219 Sanford Florida
2 1049956215 Columbus Georgia
0 1
0 Alex.jhon gmail.com
1 Hamza.Azeez gmail.com
2 Harry.barton hotmail.com
Email Number Location Dialling Code \
0 Alex.jhon@gmail.com +44-3844556210 Alameda,California +44
1 Hamza.Azeez@gmail.com +44-2245551219 Sanford,Florida +44
2 Harry.barton@hotmail.com +44-1049956215 Columbus,Georgia +44
Cell-Number City State First Name Last Name
0 3844556210 Alameda California Alex jhon
1 2245551219 Sanford Florida Hamza Azeez
2 1049956215 Columbus Georgia Harry barton