Функция Pandas Series.str.split()
Часто используемые функции 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: Базовое использование — разделение по пробельным символам
Пример
# Создайте 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]
Пояснение к коду:
s.str.split()По умолчанию строки разделяются по пробельным символам (пробелы, табуляции и т. д.).- Возвращаемое значение — это Series, содержащий списки; каждый список содержит подстроки после разделения.
- 'pandas data analysis' разделяется на три части.
Пример 2: Разделение по указанному разделителю
Вы можете использоватьpatпараметр для указания пользовательского разделителя.
Пример
# Создание 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параметр, можно ограничить количество разделений.
Пример
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.
Пример
# Создание 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()Он также поддерживает использование регулярных выражений в качестве разделителей.
Пример
# Создайте 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()часто используется в сочетании с другими функциями.
Пример
# Смоделировать данные, извлечённые из логов
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.
Другие расширения