Основы обработки строк Pandas

Основы работы с текстовыми данными DataFrame в Pandas

Рассмотрим основные аспекты обработки строковых данных в Pandas, включая создание, индексацию, фильтрацию, агрегацию и манипуляции строками, а также представим полезные методы и функции для эффективной работы с текстовыми данными.

Введение в работу с текстовыми данными

В Pandas строки представляются объектами str, и вы можете выполнять с ними разнообразные операции. Для начала, импортируем библиотеку Pandas и создадим Series с текстовыми данными:

import pandas as pd

data = {'text': ['apple', 'banana', 'cherry', 'date']}
series = pd.Series(data['text'])

# Вывод первых двух строк
print(series.head(2))

# 0     apple
# 1    banana
# dtype: object

Индексация и фильтрация строк

Одной из первых вещей, с которыми вы можете столкнуться при работе с текстовыми данными, это индексация и фильтрация строк. В Pandas это выполняется с использованием методов .str.

import pandas as pd

data = {'text': ['apple', 'banana', 'cherry', 'date']}
series = pd.Series(data['text'])

# Фильтрация строк, начинающихся с буквы 'b'
filtered_series = series[series.str.startswith('b')]

# Фильтрация строк, содержащих подстроку 'rr'
filtered_series2 = series[series.str.contains('rr')]

# Выбор строк по длине текста
filtered_series3 = series[series.str.len() > 5]

print("Strings starting with 'b':\n", filtered_series)
print("\nStrings containing 'rr':\n", filtered_series2)
print("\nStrings longer than 5 characters:\n", filtered_series3)

# Strings starting with 'b':
#  1    banana
# dtype: object
# 
# Strings containing 'rr':
#  2    cherry
# dtype: object
# 
# Strings longer than 5 characters:
#  1    banana
# 2    cherry
# dtype: object

Манипуляции строками

Pandas предоставляет множество методов для манипуляции строками. Например, вы можете преобразовать строки в верхний или нижний регистр, заменить подстроки, удалить пробелы и многое другое.

# Преобразование строк в верхний регистр
upper_case = series.str.upper()

# Замена подстроки
replaced = series.str.replace('a', 'x')

# Удаление пробелов в начале и конце строк
stripped = series.str.strip()

print("Uppercase:\n", upper_case)
print("\nReplace 'a' with 'x':\n", replaced)
print("\nStripped spaces:\n", stripped)

# Uppercase:
#  0     APPLE
# 1    BANANA
# 2    CHERRY
# 3      DATE
# dtype: object
# 
# Replace 'a' with 'x':
#  0     xpple
# 1    bxnxnx
# 2    cherry
# 3      dxte
# dtype: object
# 
# Stripped spaces:
#  0     apple
# 1    banana
# 2    cherry
# 3      date

Разделение и объединение строк

Вы также можете разделять строки на подстроки и объединять строки в Pandas.

# Разделение строк на подстроки по пробелам
split = series.str.split(' ')

# Объединение строк с разделителем
joined = series.str.cat(sep=' ')

print("Split strings by space:\n", split)
print("\nJoined strings with space:\n", joined)

# Split strings by space:
#  0     [apple]
# 1    [banana]
# 2    [cherry]
# 3      [date]
# dtype: object
# 
# Joined strings with space:
#  apple banana cherry date

Агрегация данных

При работе с текстовыми данными вы можете выполнять агрегацию, подсчитывать уникальные значения, вычислять длину строк и многое другое.

# Подсчет уникальных значений
unique_values = series.nunique()

# Вычисление длины каждой строки
lengths = series.str.len()

# Вычисление максимальной длины строки
max_length = series.str.len().max()

print("Unique values:\n", unique_values)
print("\nString lengths:\n", lengths)
print("\nMaximum string length:\n", max_length)

# Unique values:
#  4
# 
# String lengths:
#  0    5
# 1    6
# 2    6
# 3    4
# dtype: int64
# 
# Maximum string length:
#  6

Работа с регулярными выражениями

Pandas также поддерживает работу с регулярными выражениями для более сложных операций с текстом. Вы можете использовать метод str.extract() для извлечения информации из строк на основе регулярных выражений.

# Извлечение чисел из строк
numbers = series.str.extract(r'(\d+)')

print("Extracted numbers:\n", numbers)

# Extracted numbers:
#       0
# 0  NaN
# 1  NaN
# 2  NaN
# 3  NaN

Удаление и замена значений

Pandas предоставляет методы для удаления и замены значений в строках. Например, вы можете удалить строки, в которых определенная подстрока отсутствует или заменить значения, удовлетворяющие определенным условиям.

# Удаление строк, не содержащих подстроку 'apple'
filtered_series = series[series.str.contains('apple')]

# Замена значений, удовлетворяющих условию
replaced = series.where(~series.str.contains('a'), 'pear')

print("Strings containing 'apple':\n", filtered_series)
print("\nReplace values containing 'a' with 'pear':\n", replaced)

# Strings containing 'apple':
#  0    apple
# dtype: object
# 
# Replace values containing 'a' with 'pear':
#  0      pear
# 1      pear
# 2    cherry
# 3      pear
# dtype: object

Разделение на столбцы

Если в ваших данных есть строки с несколькими значениями, вы можете разделить их на столбцы с помощью метода str.split().

# Создание DataFrame со строками, содержащими имена и фамилии
data = {'name': ['John Smith', 'Alice Johnson', 'Bob Brown']}
df = pd.DataFrame(data)

# Разделение на столбцы
split_df = df['name'].str.split(' ', expand=True)
split_df.columns = ['first_name', 'last_name']

print("Split into columns:\n", split_df)

# Split into columns:
#    first_name last_name
# 0       John     Smith
# 1      Alice   Johnson
# 2        Bob     Brown

Конкатенация строк

Вы также можете объединять строки в Pandas с использованием метода str.cat(). Это полезно, когда вам нужно объединить значения из нескольких столбцов в одну строку.

# Создание DataFrame с именем и фамилией
data = {'first_name': ['John', 'Alice', 'Bob'], 'last_name': ['Smith', 'Johnson', 'Brown']}
df = pd.DataFrame(data)

# Объединение столбцов в одну строку
df['full_name'] = df['first_name'] + ' ' + df['last_name']

print("Concatenated strings:\n", df)

# Concatenated strings:
#    first_name last_name      full_name
# 0       John     Smith     John Smith
# 1      Alice   Johnson  Alice Johnson
# 2        Bob     Brown      Bob Brown

Работа с Unicode и кодировками

Pandas позволяет работать с текстовыми данными, включая работу с Unicode и различными кодировками. Вы можете использовать методы str.encode() и str.decode() для преобразования текста из одной кодировки в другую.

data = {'text': ['apple', 'banana', 'cherry', 'date']}
series = pd.Series(data['text'])

# Преобразование строки в кодировку UTF-8
utf8_encoded = series.str.encode('utf-8')

# Декодирование строки из UTF-8
decoded = utf8_encoded.str.decode('utf-8')

print("UTF-8 encoded strings:\n", utf8_encoded)
print("\nDecoded strings:\n", decoded)

# UTF-8 encoded strings:
#  0     b'apple'
# 1    b'banana'
# 2    b'cherry'
# 3      b'date'
# dtype: object
# 
# Decoded strings:
#  0     apple
# 1    banana
# 2    cherry
# 3      date
# dtype: object

Заключение

Обработка строковых данных в Pandas предоставляет множество возможностей для анализа и манипуляций текстовой информацией. В данной статье мы рассмотрели основы работы с текстовыми данными, включая индексацию, фильтрацию, манипуляции, агрегацию и использование регулярных выражений.

Содержание: