Функция Pandas Series.str.split()

Pandas 常用函数Часто используемые функции Pandas


Series.str.split()Это функция в Pandas, используемая для разделения строк.

При обработке данных нам часто нужно разбить строку на несколько частей, например, разбить предложение на слова или разбить значения, разделённые запятыми, на списки.split()Функция может разбить строку на несколько частей в соответствии с указанным разделителем.

Значение слова:splitsplit означает «отделять, разделять», указывая на разделение строки на несколько частей.


Базовый синтаксис и параметры

str.split()Это строковый метод-аксессор Series, поэтому сначала нужно иметь Series, содержащий строки, а затем использовать.strаксессор, чтобы вызвать его.

Формат синтаксиса

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

Описание параметра

Параметр Type Обязательно? Описание Значение по умолчанию
pat str Optional Разделитель может быть строкой или регулярным выражением. По умолчанию — пробельные символы. None (пробельные символы)
n int Optional Количество разбиений. -1 означает отсутствие ограничения, разбить на как можно больше частей. -1
expand bool Optional Следует ли разворачивать результат в DataFrame. По умолчанию False (возвращает Series списков). False

Описание функций

  • Возвращаемое значение: По умолчанию возвращает Series, содержащий списки, где каждый элемент в каждом списке — это подстрока после разбиения. Когдаexpand=Trueexpand=True, возвращает DataFrame.
  • Действие: Разделяет каждую строку на несколько частей в соответствии с указанным разделителем.
  • Примечание: По умолчанию в качестве разделителя используются пробельные символы; можно указать свой разделитель.

Примеры

Давайте с помощью серии примеров от простого к сложному тщательно освоимstr.split()использование.

Пример 1: Базовое использование — разделение по пробельным символам

Пример

import pandas as pd

# Создайте Series, содержащий предложения
s = pd.Series(['hello world', 'example python', 'pandas data analysis'])

# Разделение по пробельным символам (поведение по умолчанию)
result = s.str.split()

print("Исходный ряд:")
print(s)
print("nResult after splitting:")
print(result)

Вывод:

原始 Series:
0         hello world
1      example python
2    pandas data analysis
dtype: object

拆分后的结果:
0         [hello, world]
1    [example, python]
2    [pandas, data, analysis]

Пояснение к коду:

  1. s.str.split()По умолчанию строки разделяются по пробельным символам (пробелы, табуляции и т. д.).
  2. Возвращаемое значение — это Series, содержащий списки; каждый список содержит подстроки после разделения.
  3. 'pandas data analysis' разделяется на три части.

Пример 2: Разделение по указанному разделителю

Вы можете использоватьpatпараметр для указания пользовательского разделителя.

Пример

import pandas as pd

# Создание Series, содержащего значения, разделённые запятыми
s = pd.Series(['apple,banana,orange', 'dog,cat,bird', 'red,green,blue'])

# Разделить по запятой
result = s.str.split(',')

print("Исходный ряд:")
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 части (то есть разделить только один раз)
result_1 = s.str.split(',', n=1)

print("Исходный ряд:")
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Когда 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("Исходный ряд:")
print(s)
print("nРазвёрнуто в DataFrame:")
print(result)
print("nТип DataFrame:", 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.
  • Каждый столбец представляет позицию после разделения.
  • Это очень полезно при работе со структурированными данными.

Пример 5: Разделение с помощью регулярных выражений

split()Он также поддерживает использование регулярных выражений в качестве разделителей.

Пример

import pandas as pd

# Создайте Series, содержащий различные разделители
s = pd.Series(['hello-world', 'example_python', 'pandas#tutorial'])

# Разделить по регулярному выражению (совпадение с любым из -, _, #)
result = s.str.split(r'[-_#]')

print("Исходный ряд:")
print(s)
print("nРазделение по регулярному выражению:")
print(result)

Вывод:

原始 Series:
0     hello-world
1   example_python
2    pandas#tutorial
dtype: object

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

Пояснение к коду:

  • r'[-_#]'Это регулярное выражение, которое соответствует любому из '-', '_' или '#'.
  • Он может обрабатывать несколько различных разделителей одновременно.

Пример 6: Обработка реальных данных

В практических приложениях,split()часто используется в сочетании с другими функциями.

Пример

import pandas as pd

# Смоделировать данные, извлечённые из логов
logs = pd.Series([
    '2024-01-01 10:30:45 ERROR Не удалось подключиться',
    '2024-01-01 10:31:12 INFO Пользователь вошёл в систему',
    '2024-01-01 10:32:00 WARNING Высокое использование памяти'
])

# Разделить содержимое лога
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+'Соответствует одному или нескольким пробельным символам, разделяя лог на несколько частей.
  • expand=TrueРазвернуть результат разделения в DataFrame.
  • Переименовав столбцы, можно удобно обращаться к каждой части и обрабатывать её.

Примечания

  • str.split()По умолчанию в качестве разделителя используется пробельный символ.
  • Когдаexpand=FalseЕсли expand=False, возвращается Series, содержащий списки.
  • Когдаexpand=TrueЕсли expand=True, возвращается DataFrame, и количество столбцов зависит от самого длинного результата разделения.
  • Если строка не содержит разделитель, возвращаемый список содержит только один элемент (исходную строку).
  • Регулярные выражения можно использовать в качестве разделителей, что обеспечивает более гибкий способ разделения.
  • Если Series содержит значения NaN, возвращается NaN.

Pandas 常用函数Часто используемые функции Pandas

Другие расширения