Pandas DataFrame 列を区切り記号で分割する

Mehvish Ashiq 2023年6月21日
Pandas DataFrame 列を区切り記号で分割する

提供されたデータを簡単に解析し、より具体的な情報を含む新しい列を作成できる機能は価値があります。 そのようなシナリオの 1つは、Pandas データフレーム列を区切り記号で分割し、そこから複数の列を作成する場合です。

たとえば、A, D, G のような区切り記号で区切られた値を含む列があり、これらの値を AD、および G を別々に保持する複数の列に分割したいとします。

このチュートリアルでは、str.split() メソッドを使用して Pandas データフレーム列を区切り記号で分割する方法を説明します。

Pandas DataFrame 列を区切り記号で分割する

str.split() メソッドの使用を示すさまざまな例に進む前に、その構文と可能なパラメーターを理解することが重要です。

構文:

Series.str.split(pat=None, n=-1, expand=False, regex=None)

次に、パラメータの簡単な説明を示します。

パラメータ 説明
pat 文字列を分割するセパレータとして使用される文字列型の値または正規表現である必要があります。 空白が指定されていない場合、区切り記号/区切り記号として使用されます。
n 出力の分割の最大数を示します。 n=-1n=0、および n=None は、すべての分割を返すことを意味します。 デフォルトでは、n-1 に設定されています。
expand ブール値を取り、True の場合、異なる列に異なる値を保持するデータフレームになります。 それ以外の場合は、文字列のリストを持つシリーズ。 デフォルトでは、expandFalse に設定されています。
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 がコンパイルされた正規表現であり、regexFalse に設定されている場合、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_namelast_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つの違いを除いて前のものと似ています。 ここでは、expandFalse に設定して、分割値のリストを含む列を作成します。

最大分割数を指定して 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

ここでは、n1 に設定して、最大 1つの分割を取得します。 この例では、名前のみを取得することに焦点を当てています。

著者: Mehvish Ashiq
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

関連記事 - Pandas DataFrame Column