И когда использовать какой

Pandas — это высокоэффективная библиотека для анализа данных и анализа манипуляций для Python. Учитывая доминирование Python в науке о данных и объем работы по очистке, обработке и анализу данных, Pandas является одним из наиболее широко используемых инструментов в области науки о данных.

Я использую Pandas для выполнения своей работы и создания контента. Прошло почти 3 года с тех пор, как я впервые написал код Pandas, и я все еще продолжаю изучать новые вещи.

Конечно, наличие активного сообщества открытого исходного кода и постоянное совершенствование являются важным фактором для изучения новых приемов Pandas.

В этой статье мы рассмотрим конкретную часть Pandas: замену функций. Я написал это во множественном числе, потому что в Pandas есть две разные функции замены.

  1. pandas.DataFrame.replace
  2. pandas.Series.str.replace

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

Давайте начнем с создания образца DataFrame для работы.

import pandas as pd

df = pd.DataFrame(
    
    {
        "name": ["Jane", "James", "Jhn", "Matt", "Emily", "Ashley"],
        "profession": ["doc", "doctor", "eng", "engineer", "eng", "accountant"],
        "category": ["group-1", "group-1", "group-2", "group-3", "group-1", "group-2"],
        "address": ["Houston-TX", "Dallas, TX", "Houston, TX", "Dallas, Texas", "Palo Alto, CA", "Austin, TX"]
    }

)

df

DataFrame.replace

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

Например, мы можем заменить «доктор» в столбце «профессия» на «доктор».

df["profession"].replace(to_replace="doc", value="doctor")

# output
0        doctor
1        doctor
2           eng
3      engineer
4           eng
5    accountant
Name: profession, dtype: object

Мы также можем напрямую применить функцию к DataFrame. В этом случае имя столбца указывается с помощью словаря Python.

df.replace(to_replace={"profession": {"doc": "doctor"}})

В предыдущих двух примерах строка «doc» была заменена на «doctor». Строку «eng» в колонке «профессия» следует заменить на «engineer».

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

df.replace(to_replace={"profession": {"doc": "doctor", "eng": "engineer"}})

И «doc», и «eng» были заменены. Существует еще один способ замены нескольких значений в столбце, который использует списки Python для указания заменяемых и новых значений.

df["profession"].replace(
    to_replace=["doc", "eng"], 
    value=["doctor", "engineer"]
)

# output
0        doctor
1        doctor
2      engineer
3      engineer
4      engineer
5    accountant
Name: profession, dtype: object

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

Следующий фрагмент кода заменил несколько значений в столбцах имени и профессии.

df.replace(
    
    {
        "profession": {"doc": "doctor", "eng": "engineer"},
        "name": {"Jhn": "John"}
    }

)

Серия.стр.заменить

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

Аксессоры в Pandas предоставляют функции, специфичные для определенного типа данных. Метод доступа str предназначен для строковых операций.

Функцию «str.replace» можно использовать для замены символа в строке.

df["address"]

# output
0       Houston-TX
1       Dallas, TX
2      Houston, TX
3    Dallas, Texas
4    Palo Alto, CA
5       Austin, TX
Name: address, dtype: object


df["address"].str.replace("-", ", ")

# output
0      Houston, TX
1       Dallas, TX
2      Houston, TX
3    Dallas, Texas
4    Palo Alto, CA
5       Austin, TX
Name: address, dtype: object

Слово «Texas» в строке 3 выше является подпоследовательностью строки, поэтому мы можем использовать «str.replace», чтобы заменить его на «TX».

df["address"].str.replace("Texas", "TX")

# output
0       Houston-TX
1       Dallas, TX
2      Houston, TX
3       Dallas, TX
4    Palo Alto, CA
5       Austin, TX
Name: address, dtype: object

Чтобы выполнить множественную замену, мы можем связать операции следующим образом:

df["address"].str.replace("-", ", ").str.replace("Texas", "TX")

# output
0      Houston, TX
1       Dallas, TX
2      Houston, TX
3       Dallas, TX
4    Palo Alto, CA
5       Austin, TX
Name: address, dtype: object

В отличие от «DataFrame.replace», «str.replace» нельзя применить к DataFrame, поскольку объект DataFrame не имеет атрибута str.

«str.replace» можно использовать для замены целых строк, но убедитесь, что заменяемая строка не является подстрокой в ​​другом значении. Давайте сделаем пример, чтобы продемонстрировать этот случай. Вот наш DataFrame:

Давайте используем «str.replace», чтобы заменить «doc» на «doctor» в столбце профессии.

df["profession"].str.replace("doc", "doctor")

# output
0        doctor
1     doctortor
2           eng
3      engineer
4           eng
5    accountant
Name: profession, dtype: object

Замена в строке 0 в порядке, но у нас есть проблема в строке 1. Подпоследовательность «doc» в строке «doctor» также была заменена на «doctor», поэтому в итоге у нас есть строка «docdoctor», что определенно не то, что мы хотим.

Случаи, когда оба работают

Допустим, мы хотим заменить значения в столбце категории целыми числами. Для этой задачи мы можем использовать как «DataFrame.replace», так и «str.replace».

df["category"].str.replace("group-", "")

# output
0    1
1    1
2    2
3    3
4    1
5    2
Name: category, dtype: object


df["category"].replace(
    {"group-1": 1, "group-2": 2, "group-3": 3}
)

# output
0    1
1    1
2    2
3    3
4    1
5    2
Name: category, dtype: int64

Вывод такой же, за исключением типа данных. Когда используется «str.replace», тип данных остается строковым (или объектом). Таким образом, нам нужен дополнительный шаг преобразования типа данных, чтобы иметь целые числа, представляющие категории.

Заключение

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

Важно отметить, что обе эти функции поддерживают регулярные выражения (т. е. регулярные выражения), что делает их еще более гибкими и способными. Если вы передаете шаблон и хотите, чтобы он обрабатывался как регулярное выражение, просто установите значение параметра регулярного выражения как True.

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

Спасибо за чтение. Пожалуйста, дайте мне знать, если у вас есть какие-либо отзывы.