Pandas DataFrame 列を区切り記号で分割する
提供されたデータを簡単に解析し、より具体的な情報を含む新しい列を作成できる機能は価値があります。 そのようなシナリオの 1つは、Pandas データフレーム列を区切り記号で分割し、そこから複数の列を作成する場合です。
たとえば、A, D, G
のような区切り記号で区切られた値を含む列があり、これらの値を A
、D
、および G
を別々に保持する複数の列に分割したいとします。
このチュートリアルでは、str.split()
メソッドを使用して Pandas データフレーム列を区切り記号で分割する方法を説明します。
Pandas DataFrame 列を区切り記号で分割する
str.split()
メソッドの使用を示すさまざまな例に進む前に、その構文と可能なパラメーターを理解することが重要です。
構文:
Series.str.split(pat=None, n=-1, expand=False, regex=None)
次に、パラメータの簡単な説明を示します。
パラメータ | 説明 |
---|---|
pat |
文字列を分割するセパレータとして使用される文字列型の値または正規表現である必要があります。 空白が指定されていない場合、区切り記号/区切り記号として使用されます。 |
n |
出力の分割の最大数を示します。 n=-1 、n=0 、および n=None は、すべての分割を返すことを意味します。 デフォルトでは、n は -1 に設定されています。 |
expand |
ブール値を取り、True の場合、異なる列に異なる値を保持するデータフレームになります。 それ以外の場合は、文字列のリストを持つシリーズ。 デフォルトでは、expand は False に設定されています。 |
regex (バージョン 1.4.0 で追加) |
It accepts a Boolean value that tells if the specified pattern is a regex or not; by default, regex is set to None . |
True は指定されたパターンが正規表現であることを意味し、False は文字列リテラルを意味します。 None に設定され、pat の長さが 1 の場合、pat を文字列リテラルとして扱います。 一方、regex=None かつ pat の長さが 1 でない場合、pat を正規表現として扱います。 |
pat
がコンパイルされた正規表現であり、regex
が False
に設定されている場合、ValueError
が返されます。 詳しくは こちら をご覧ください。
それでは、コード例に飛び込んで練習しましょう。
full_name
列を複数の列に分割します (first_name
& last_name
)
コード例:
import pandas as pd
df = pd.DataFrame(
{
"full_name": [
"Mehvish Ashiq",
"Hania Arif",
"Zobia Shakeel",
"Tahir Mukhtar",
"Mazhar Ali",
]
}
)
print("Before Splitting:\n")
print(df)
df[["first_name", "last_name"]] = df["full_name"].str.split(" ", expand=True)
print("\nAfter Splitting:\n")
print(df)
出力:
Before Splitting:
full_name
0 Mehvish Ashiq
1 Hania Arif
2 Zobia Shakeel
3 Tahir Mukhtar
4 Mazhar Ali
After Splitting:
full_name first_name last_name
0 Mehvish Ashiq Mehvish Ashiq
1 Hania Arif Hania Arif
2 Zobia Shakeel Zobia Shakeel
3 Tahir Mukhtar Tahir Mukhtar
4 Mazhar Ali Mazhar Ali
上記のコード フェンスのデータフレームには、1つのスペースで区切られたランダムな名と姓を持つ列 (full_name
) が含まれていることがわかります。
full_name
を 2つの列 (first_name
と last_name
) に分割し、名と姓を別々に含めます。 これを行うために、ベクトル化された str.split()
メソッドと expand=True
を使用しました。
full_name
列を、分割値のリストを持つ新しい列に分割する
コード例:
import pandas as pd
df = pd.DataFrame(
{
"full_name": [
"Mehvish Ashiq",
"Hania Arif",
"Zobia Shakeel",
"Tahir Mukhtar",
"Mazhar Ali",
]
}
)
print("Before Splitting:\n")
print(df)
df["[first_name,last_name]"] = df["full_name"].str.split(" ", expand=False)
print("\nAfter Splitting:\n")
print(df)
出力:
Before Splitting:
full_name
0 Mehvish Ashiq
1 Hania Arif
2 Zobia Shakeel
3 Tahir Mukhtar
4 Mazhar Ali
After Splitting:
full_name [first_name,last_name]
0 Mehvish Ashiq [Mehvish, Ashiq]
1 Hania Arif [Hania, Arif]
2 Zobia Shakeel [Zobia, Shakeel]
3 Tahir Mukhtar [Tahir, Mukhtar]
4 Mazhar Ali [Mazhar, Ali]
このコード フェンスは、1つの違いを除いて前のものと似ています。 ここでは、expand
を False
に設定して、分割値のリストを含む列を作成します。
最大分割数を指定して full_name
列を分割する
コード例:
import pandas as pd
df = pd.DataFrame(
{
"full_name": [
"Mehvish Ashiq Hussain",
"Hania Arif Ali",
"Zobia Shakeel Amjad",
"Tahir Mukhtar Ahmed",
"Mazhar Ali Azhar",
]
}
)
print("Before Splitting:\n")
print(df)
print("\nAfter Splitting:\n")
print(df["full_name"].str.split(" ", n=1, expand=True))
出力:
Before Splitting:
full_name
0 Mehvish Ashiq Hussain
1 Hania Arif Ali
2 Zobia Shakeel Amjad
3 Tahir Mukhtar Ahmed
4 Mazhar Ali Azhar
After Splitting:
0 1
0 Mehvish Ashiq Hussain
1 Hania Arif Ali
2 Zobia Shakeel Amjad
3 Tahir Mukhtar Ahmed
4 Mazhar Ali Azhar
ここでは、n
を 1
に設定して、最大 1つの分割を取得します。 この例では、名前のみを取得することに焦点を当てています。