Замена значений в столбце DataFrame в pandas: варианты решения
Быстрый ответ
Для моментальной замены значений в колонке DataFrame примените метод .replace()
:
df['A'].replace(10, 'десять', inplace=True)
В указанном выше примере производится замена всех '10' на 'десять' в колонке 'A'.
Если требуется произвести сразу несколько замен, например, 10 на 'десять', и 20 на 'двадцать', используйте словарь:
df['A'].replace({10: 'десять', 20: 'двадцать'}, inplace=True)
Детальное рассмотрение процесса замены
Работа с категориальными данными
Преобразование категориальных данных удобно осуществлять с использованием метода map
. Например, при замене 'female' на '1' и 'male' на '0', код будет выглядеть следующим образом:
gender_map = {'female': 1, 'male': 0}
df['Gender'] = df['Gender'].map(gender_map)
Условная замена с применением loc
Для замены значений на основании определённых условий используется метод loc
с булевой индексацией:
df.loc[df['Age'] > 50, 'AgeCategory'] = 'Senior'
df.loc[df['Age'] <= 50, 'AgeCategory'] = 'Adult'
Преобразование текстовых меток в числовые значения
Если после замены текстовые метки следует конвертировать в числа, хорошо подходит функция pd.to_numeric()
:
df['Score'] = df['Score'].replace(['low', 'medium', 'high'], [1, 2, 3])
df['Score'] = pd.to_numeric(df['Score'])
Визуализация
Рассмотрим DataFrame с перечислением автомобилей, в котором требуется обновить типы топлива:
🚗 Исходный список: | 🛵 | 🚙 | 🚌 | 🚜 | ✔️ |
---|---|---|---|---|---|
Б | Б | Д | Т | Э |
🔄 Произведём замену 'Дизель' на 'Электричество':
df['FuelType'].replace('Д', 'Э', inplace=True)
🚗 Обновлённый список: | 🛵 | 🚙 | 🚌 | 🛴 | ✔️ |
---|---|---|---|---|---|
Э | Б | Э | Т | Э |
Таким образом, наш гараж теперь удовлетворяет экологическим требованиям. 🌱⚡
Практические советы по обработке замен
Точность выборки данных
Перед процессом замены убедитесь, что индексы колонок и строк указаны правильно, чтобы избежать неточностей:
df.loc[2:4, 'A'] = df.loc[2:4, 'A'].replace({10: 'десять'})
Сохранение значений NaN при замене
Для сохранения значений NaN воспользуйтесь параметром replace
:
df['A'] = df['A'].replace({10: 'десять', 20: 'двадцать'}, inplace=True)
Применение векторизации вместо циклов for
Для ускорения процесса выполнения операций предпочтительно использовать методы вроде apply
и «векторизацию», а не циклы for. Пример с np.where
:
import numpy as np
df['A'] = np.where(df['A'] == 10, 'десять', df['A'])
Полезные материалы
- pandas.DataFrame.replace — Документация pandas 2.2.0 — полная документация по методу
.replace()
. - python – Переназначение значений в столбце pandas с использованием словаря, сохранение NaN – Stack Overflow — обсуждение переназначения значений с сохранением NaN.
- 10 минут с pandas — Документация pandas 2.2.0 — короткое руководство по начальной работе с pandas.
- Выборка данных в Pandas: Часть 1 | автор Ted Petrou | Dunder Data | Medium — инструкция по выборке и изменению данных с помощью
loc[]
иiloc[]
. - python – Задать значение для конкретной ячейки в DataFrame pandas с помощью iloc – Stack Overflow — обсуждение применения iloc для замены значений по условиям.
- Использование pandas и Python для изучения вашего набора данных – Real Python — практическое руководство по работе с данными в pandas.