Pandas Series.str.split() 関数

Pandas よく使う関数


Series.str.split()は、Pandas で文字列を分割するための関数です。

データ処理の過程では、文字列を複数の部分に分割する必要がよくあります。例えば、文を単語に分割したり、カンマ区切りの値をリストに分割したりします。split()関数は、指定した区切り文字に従って文字列を複数の部分に分割できます。

単語の意味:splitは「分ける、分割する」という意味で、文字列を複数の部分に分割することを表します。


基本構文とパラメータ

str.split()は Series の文字列アクセサメソッドです。そのため、まず文字列を含む Series を用意する必要があり、その後.strアクセサを使用して呼び出します。

構文形式

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

パラメータの説明

パラメータ 型 必須かどうか 説明 デフォルト値
pat str 任意 区切り文字。文字列または正規表現を指定できます。デフォルトは空白文字です。 None(空白文字)
n int 任意 分割する回数。-1 は制限なしを意味し、可能な限り多くの部分に分割します。 -1
expand bool 任意 結果を DataFrame に展開するかどうか。デフォルトは False(リストの Series を返します)。 False

関数の説明

  • 戻り値:デフォルトでは、リストを含む Series を返します。各リストの要素は分割後の部分文字列です。expand=Trueの場合、DataFrame を返します。
  • 効果:指定した区切り文字に従って、各文字列を複数の部分に分割します。
  • 注意:デフォルトでは空白文字を区切り文字として使用します。区切り文字はカスタマイズできます。

実例

簡単なものから複雑なものまでの一連の例を通して、str.split()の使い方を完全にマスターしましょう。

例1:基本的な使い方 - 空白文字による分割

実例

import pandas as pd

# 文を含む Series を作成する
s = pd.Series(['hello world', 'サンプル python', 'pandas data analysis'])

# 空白文字で分割(デフォルト動作)
result = s.str.split()

print("原始 Series:")
print(s)
print("n分割後の結果:")
print(result)

出力結果:

原始 Series:
0         hello world
1      サンプル python
2    pandas data analysis
dtype: object

拆分后的结果:
0         [hello, world]
1    [サンプル, python]
2    [pandas, data, analysis]

コードの解説:

  1. s.str.split()デフォルトでは空白文字(スペース、タブなど)で文字列を分割します。
  2. 戻り値はリストを含む Series であり、各リストには分割後の部分文字列が含まれます。
  3. 'pandas data analysis' は3つの部分に分割されます。

例2:指定した区切り文字による分割

によって、patパラメータでカスタムの区切り文字を指定できます。

実例

import pandas as pd

# カンマ区切りの値を含む Series を作成する
s = pd.Series(['apple,banana,orange', 'dog,cat,bird', 'red,green,blue'])

# 按逗号拆分
result = s.str.split(',')

print("原始 Series:")
print(s)
print("nをカンマで分割した結果:")
print(result)

出力結果:

原始 Series:
0    apple,banana,orange
1       dog,cat,bird
2       red,green,blue
dtype: object

拆分后的结果:
0    [apple, banana, orange]
1       [dog, cat, bird]
2       [red, green, blue]

コードの解説:

  • s.str.split(',')カンマで各文字列を分割します。
  • これは、CSVデータやカンマ区切り値を処理する一般的な方法です。

例3:分割回数の制限

によって、nパラメータで分割回数を制限できます。

実例

import pandas as pd

s = pd.Series(['a,b,c,d,e', '1,2,3,4,5'])

# 分割を2つの部分だけに限定
result_2 = s.str.split(',', n=2)
# 分割を1つの部分のみに制限(すなわち1回だけ分割)
result_1 = s.str.split(',', n=1)

print("原始 Series:")
print(s)
print(n制限を2つの部分に分割:)
print(result_2)
print(n制限を1つの部分に分割:)
print(result_1)

出力結果:

原始 Series:
0       a,b,c,d,e
1       1,2,3,4,5
dtype: object

限制拆分为 2 部分:
0       [a, b, c,d,e]
1       [1, 2, 3,4,5]

限制拆分为 1 部分:
0            [a, b,c,d,e]
1            [1, 2,3,4,5]

コードの解説:

  • n=2は、最大2つの部分に分割することを意味し、最後の部分には残りのすべての内容が含まれます。
  • n=1は、最初の区切り文字の位置でのみ分割し、2つの部分を取得することを意味します。

例4:DataFrameへの展開

当 expand=Trueの場合、分割結果は DataFrame に展開されます。

実例

import pandas as pd

# カンマ区切りの値を含む Series を作成する
s = pd.Series(['apple,banana,orange', 'dog,cat,bird', 'red,green,blue'])

# DataFrameに展開
result = s.str.split(',', expand=True)

print("原始 Series:")
print(s)
print(nをDataFrameに展開:)
print(result)
print("nDataFrame 类型:", type(result))

出力結果:

原始 Series:
0    apple,banana,orange
1       dog,cat,bird
2       red,green,blue
dtype: object

展开为 DataFrame:
        0       1       2
0   apple   banana  orange
1     dog     cat    bird
2     red   green    blue

DataFrame 类型: <class 'pandas.core.frame.DataFrame'>

コードの解説:

  • expand=True分割結果を DataFrame に展開します。
  • 各列は分割後の1つの位置を表します。
  • これは構造化データを処理する際に非常に便利です。

例5:正規表現を使用した分割

split()は、区切り文字として正規表現を使用することもサポートしています。

実例

import pandas as pd

# 異なる区切り文字を含む Series を作成する
s = pd.Series(['hello-world', 'サンプル_python', 'pandas#tutorial'])

# 正規表現で分割(-、_、# のいずれかに一致)
result = s.str.split(r'[-_#]')

print("原始 Series:")
print(s)
print("n按正则表达式拆分:")
print(result)

出力結果:

原始 Series:
0     hello-world
1   サンプル_python
2    pandas#tutorial
dtype: object

按正则表达式拆分:
0       [hello, world]
1       [サンプル, python]
2    [pandas, tutorial]

コードの解説:

  • r'[-_#]'は正規表現であり、'-'、'_'、'#' のいずれか1文字にマッチします。
  • 正規表現は、複数の異なる区切り文字を同時に処理できます。

例6:実際のデータの処理

実際のアプリケーションでは、split()は、他の関数と組み合わせて使用されることがよくあります。

実例

import pandas as pd

# ログから抽出したデータをシミュレーションする
logs = pd.Series([
    '2024-01-01 10:30:45 ERROR Connection failed',
    '2024-01-01 10:31:12 INFO User logged in',
    '2024-01-01 10:32:00 WARNING Memory usage high'
])

# 拆分日志内容
log_parts = logs.str.split(r's+', expand=True)

print("原始日志:")
print(logs)
print(n分割後の DataFrame:)
print(log_parts)

# 重命名列
log_parts.columns = ['timestamp', 'level', 'message']
print("nリネーム後の結果:")
print(log_parts)

出力結果:

原始日志:
0    2024-01-01 10:30:45 ERROR Connection failed
1    2024-01-01 10:31:12 INFO User logged in
2    2024-01-01 10:32:00 WARNING Memory usage high
dtype: object

拆分后的 DataFrame:
                  0     1     2
0  2024-01-01 10:30:45  ERROR  Connection failed
1  2024-01-01 10:31:12   INFO  User logged in
2  2024-01-01 10:32:00  WARNING  Memory usage high

重命名后的结果:
               timestamp    level                message
0  2024-01-01 10:30:45    ERROR    Connection failed
1  2024-01-01 10:31:12     INFO      User logged in
2  2024-01-01 10:32:00  WARNING  Memory usage high

コードの解説:

  • r's+'は1つ以上の空白文字にマッチし、ログを複数の部分に分割します。
  • expand=True分割結果を DataFrame に展開します。
  • 列の名前を変更することで、各部分に簡単にアクセスして処理できます。

注意事項

  • str.split()デフォルトでは、空白文字が区切り文字として使用されます。
  • 当 expand=Falseの場合、リストを含む Series を返します。
  • 当 expand=Trueの場合、DataFrame を返します。列数は最長の分割結果に応じて異なります。
  • 文字列に区切り文字が含まれていない場合、返されるリストには1つの要素(元の文字列)だけが含まれます。
  • 正規表現は区切り文字として使用でき、より柔軟な分割方法を提供します。
  • Series に NaN 値が含まれている場合は、NaN を返します。

Pandas よく使う関数

その他の拡張