Что нужно знать, чтобы начать

Pandas - популярная библиотека Python, которая позволяет легко использовать структуры данных и инструменты анализа данных. Pandas можно использовать для чтения данных, генерации статистики, агрегирования, разработки функций для машинного обучения и многого другого. Библиотека Pandas также предоставляет набор инструментов для работы со строками / текстом.

В этом посте мы рассмотрим некоторые из наиболее важных методов манипулирования строками, предоставляемые pandas.

Давайте начнем!

Во-первых, давайте импортируем библиотеку Pandas.

import pandas as pd

Теперь давайте определим пример серии панд, содержащей строки:

s = pd.Series(['python is awesome', 'java is just ok', 'c++ is overrated'])

Напечатаем эту серию:

print(s)

Мы замечаем, что в серии есть «dtype: object», который автоматически выбирается по умолчанию. В общем, лучше иметь выделенный тип. Начиная с выпуска Pandas 1.0, теперь мы можем указывать выделенные типы. Убедитесь, что Pandas обновлен, выполнив в терминале следующую команду:

pip install -U pandas

Мы можем указать «dtype: string» следующим образом:

s1 = pd.Series(['python is awesome', 'java is just ok', 'c++ is overrated'], dtype='string')

Напечатаем серию:

Мы видим, что тип серии указан. Лучше указать тип, а не использовать значение по умолчанию «dtype: object», потому что это допускает случайное смешение типов, что не рекомендуется. Например, с «dtype: object» у вас может быть ряд с целыми числами, строками и числами с плавающей запятой. По этой причине содержимое «dtype: object» может быть расплывчатым.

Затем давайте рассмотрим некоторые конкретные строковые методы. Давайте рассмотрим метод «count ()». Давайте немного изменим нашу серию для этого примера:

s = pd.Series(['python is awesome. I love python.', 'java is just ok. I like python more', 
                'c++ is overrated. You should consider learning another language, like java or python.'], dtype="string")

Напечатаем новую серию:

print(s)

Давайте посчитаем, сколько раз слово «питон» встречается в каждой строке:

print(s.str.count('python'))

Мы видим, что это возвращает серию "dtype: int64".

Еще один метод, который мы можем рассмотреть, - это метод isdigit (), который возвращает логический ряд в зависимости от того, является ли строка цифрой. Давайте определим новую серию, чтобы продемонстрировать использование этого метода. Допустим, у нас есть серия, определяемая списком строковых цифр, где отсутствующие строковые цифры имеют значение «неизвестно»:

s2 = pd.Series(['100', 'unknown', '20', '240', 'unknown', '100'], dtype="string")

Если мы воспользуемся методом isdigit (), мы получим:

print(s2.str.isdigit())

Мы также можем использовать метод match () для проверки наличия определенных строк. Проверим наличие строки «100»:

print(s2.str.match('100'))

Мы даже можем проверить наличие «un»:

print(s2.str.match('un'))

Все это соответствует нашим ожиданиям. Мы также можем использовать методы для изменения регистра текста строки в нашей серии. Вернемся к нашей серии мнений о разных языках программирования «s1»:

s1 = pd.Series(['python is awesome. I love python.', 'java is just ok. I like python more', 
                'c++ is overrated. You should consider learning another language, like java or python.'], dtype="string")

Мы можем использовать метод «upper ()», чтобы использовать заглавные буквы в строках нашей серии:

s_upper = s1.str.upper()
print(s_upper)

Мы также используем метод «lower ()»:

s_lower = s_upper.str.lower()
print(s_lower)

Мы также можем получить длину каждой строки с помощью ‘len ()’:

print(s1.str.len())

Рассмотрим еще несколько интересных способов. Мы можем использовать метод strip () для удаления пробелов. Для этого давайте определим и напечатаем новую серию примеров, содержащую строки с нежелательными пробелами:

s3 = pd.Series([' python', 'java', 'ruby ', 'fortran '])
print(s3)

Как видите, слева от «python» и справа от «ruby» и «fortran» есть пробелы. Мы можем удалить это с помощью метода strip ():

print(s3.str.strip())

Мы также можем удалить пробелы слева с помощью «lstrip»:

print(s3.str.lstrip())

и справа с "rstrip":

print(s3.str.rstrip())

В предыдущих двух примерах я работал с «dtype = object», но, опять же, постараюсь не забыть указать «dtype = strings», если вы работаете со строками.

Вы также можете использовать методы полосы для удаления нежелательных символов в тексте. Часто в реальных текстовых данных присутствует символ "\ n", обозначающий новую строку. Давайте модифицируем нашу серию и продемонстрируем использование полосы в этом случае:

s3 = pd.Series([' python\n', 'java\n', 'ruby \n', 'fortran \n'])
print(s3)

А мы можем удалить символ «\ n» с помощью «strip ()»:

print(s3.str.strip(' \n'))

В этом конкретном примере я хотел бы указать на разницу в поведении между «dtype = object» и «dtype = strings». Если мы укажем «dtype = strings» и напечатаем серию:

s4 = pd.Series([' python\n', 'java\n', 'ruby \n', 'fortran \n'], dtype='string')
print(s4)

Мы видим, что "\ n" было интерпретировано. Тем не менее, использование «strip ()» для новой указанной серии по-прежнему работает:

print(s4.str.strip(‘ \n’))

Последний метод, который мы рассмотрим, - это метод replace (). Предположим, у нас есть новый ряд с плохо отформатированными суммами в долларах:

s5 = pd.Series(['$#1200', 'dollar1,000', 'dollar10000', '$500'], dtype="string")
print(s5)

Мы можем использовать метод replace (), чтобы избавиться от нежелательного символа «#» в первом элементе:

print(s5.str.replace('#', ''))

Мы также можем заменить текст «доллар» на настоящий знак «$»:

s5 = s5.str.replace('dollar', '$')
print(s5)

Наконец, мы можем удалить "," из второго элемента:

s5 = s5.str.replace(',', '')
print(s5)

Я остановлюсь на этом, но не стесняйтесь еще немного поэкспериментировать с методами. Вы можете попробовать применить некоторые методы Pandas к свободно доступным наборам данных, таким как обзоры Yelp или Amazon, которые можно найти на Kaggle, или к своей собственной работе, если она связана с обработкой текстовых данных.

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

Есть еще много строковых методов Pandas, которые я не рассматривал в этом посте. К ним относятся методы конкатенации, индексации, извлечения подстрок, сопоставления с образцом и многое другое. Я сохраню эти методы для будущей статьи. Я надеюсь, что вы нашли этот пост интересным и / или полезным. Код в этом посте доступен на GitHub. Спасибо за чтение!