Функция Pandas df.replace()
Распространённые функции Pandas
df.replace()Это функция в Pandas, используемая для замены данных в DataFrame.
Замена данных — распространённая операция при очистке данных,replace()Она может помочь заменить определённые значения новыми значениями и поддерживает несколько гибких методов, таких как замена одного значения, замена нескольких значений и замена с помощью регулярных выражений. Это очень полезно в таких сценариях, как обработка выбросов, унификация форматов данных и преобразование кодировок.
Базовый синтаксис и параметры
replace()Это метод DataFrame, вызываемый через оператор точки.для вызова.
Формат синтаксиса
DataFrame.replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad')
Описание параметра
| Параметр | Type | Обязательный | Описание | Значение по умолчанию |
|---|---|---|---|---|
| to_replace | str, regex, list, dict, int, float, None | Обязательный | Значение, которое нужно заменить. Это может быть одно значение, список значений, словарь, регулярное выражение и т. д. | Отсутствует |
| value | scalar, dict, list, str, regex, None | Optional | Значение после замены. Еслиto_replaceесли это словарь, этот параметр можно опустить; если это не словарь, этот параметр обязателен. |
Отсутствует |
| inplace | bool | Optional | Если он равенTrue, изменять исходный DataFrame напрямую, не возвращая новый объект; если этоFalse, возвращать новый DataFrame, исходные данные остаются неизменными. |
False |
| limit | int | Optional | Укажите максимальное количество замен. | Отсутствует |
| regex | bool или str | Optional | Если он равенTrue, рассматриватьto_replaceкак регулярное выражение. |
False |
| method | str | Optional | Когдаto_replaceИспользуется, когда это список.'pad'или'ffill'Обозначает заполнение вперед;'backfill'или'bfill'Обозначает заполнение назад. |
'pad' |
Описание возвращаемого значения
- Возвращает новый DataFrame (если
inplace=False), илиNone(еслиinplace=True)。 - Указанные значения в возвращённом DataFrame были заменены.
Примеры
Давайте досконально освоим это на серии примеровreplace()использование.
Пример 1: Замена одного значения
Замените конкретное значение в DataFrame на новое значение.
Пример
import numpy as np
# Создайте DataFrame, содержащий дублирующиеся данные
data = {
'Имя': ['Чжан Сань', 'Ли Сы', 'Ван У', 'Чжао Лю'],
'Отдел': ['Технологии', 'Маркетинг', 'Технологии', 'Marketing'],
'Зарплата': [5000, 6000, 5500, 7000]
}
df = pd.DataFrame(data)
print(“Исходные данные:”)
print(df)
print("=" * 50)
# Замените 'technology' на 'R&D'
df_replaced = df.replace('Technology', R&D)
print("Заменённые данные:")
print(df_replaced)
Ожидаемый вывод:
原始数据:
姓名 部门 薪资
0 张三 技术 5000
1 李四 市场 6000
2 王五 技术 5500
3 赵六 市场 7000
==================================================
替换后的数据:
姓名 部门 薪资
0 张三 研发 5000
1 李四 市场 6000
2 王五 研发 5500
3 赵六 市场 7000
Анализ кода:
- В DataFrame есть две строки с отделом "Technology".
- Используйте
df.replace('技术', '研发')чтобы заменить все "technology" на "R&D". - Этот метод заменяет все совпадающие значения в DataFrame.
Пример 2: Замена нескольких значений один к одному
Используйте словарь, чтобы заменить несколько разных значений сразу.
Пример
# Создать DataFrame, содержащий данные для замены
data = {
'Имя': ['Чжан Сань', 'Ли Сы', 'Ван У', 'Чжао Лю'],
'city': ['Пекин', 'Шанхай', 'Гуанчжоу', 'Shenzhen'],
Уровень: ['A', 'B', 'A', 'C']
}
df = pd.DataFrame(data)
print(“Исходные данные:”)
print(df)
print("=" * 50)
# Использовать словарь для выполнения нескольких замен
replacements = {
'Beijing': 'Beijing',
'Shanghai': 'Shanghai',
'Guangzhou': 'Guangzhou',
'Shenzhen': 'Shenzhen',
'A': 'Отличное',
'B': Хороший,
'C': 'Pass'
}
df_replaced = df.replace(replacements)
print("Заменённые данные:")
print(df_replaced)
Ожидаемый вывод:
原始数据:
姓名 城市 等级
0 张三 北京 A
1 李四 上海 B
2 王五 广州 A
3 赵六 深圳 C
==================================================
替换后的数据:
姓名 城市 等级
0 张三 北京市 优秀
1 李四 上海市 良好
2 王五 广州市 优秀
3 赵六 深圳市 及格
Анализ кода:
- Используя словарь
replacements, мы можем указать несколько правил замены одновременно. - Этот метод очень эффективен, позволяя избежать множественных вызовов к
replace()。
Пример 3: Замена значений в определённом столбце
Вы можете заменять значения только в определённых столбцах, не затрагивая другие столбцы.
Пример
# Создать DataFrame
data = {
'Имя': ['Чжан Сань', 'Ли Сы', 'Ван У', 'Чжао Лю'],
'Отдел': ['Технологии', 'Маркетинг', 'Технологии', 'Marketing'],
Position: ['Technology', 'Marketing', 'Technology', 'Marketing']
}
df = pd.DataFrame(data)
print(“Исходные данные:”)
print(df)
print("=" * 50)
# Заменить "Technology" на "R&D" только в столбце "Department"
df_replaced = df.replace({'Department': 'Technology'}, R&D)
print(Данные после замены только в столбце Department:)
print(df_replaced)
print("=" * 50)
Вы также можете использовать вложенный словарь, чтобы применять разные правила замены к разным столбцам.
df_replaced2 = df.replace({'Department': {'Technology': R&D, 'Marketing': Sales}, Position: 'Technology'})
print("Данные после применения разных правил замены к разным столбцам:")
print(df_replaced2)
Ожидаемый вывод:
原始数据:
姓名 部门 职位
0 张三 技术 技术
1 李四 市场 市场
2 王五 技术 技术
3 赵六 市场 市场
==================================================
只替换部门列后的数据:
姓名 部门 职位
0 张三 研发 技术
1 李四 市场 市场
2 王五 研发 技术
3 赵六 市场 市场
==================================================
对不同列使用不同规则替换后的数据:
姓名 部门 职位
0 张三 研发 研发
1 李四 销售 市场
2 王五 研发 研发
3 赵六 销售 市场
Анализ кода:
- Использование
{'department': 'Technology'}может заменять только значения в столбце "Department". - Вложенный словарь
{'department': {'Technology': 'R&D'}}можно указать разные правила замены для разных столбцов.
Пример 4: Замена с использованием регулярных выражений
regex=TrueПараметр позволяет использовать регулярные выражения для замены, что очень полезно при обработке текста с сопоставлением по шаблону.
Пример
# Создать DataFrame, который нужно обработать с помощью регулярных выражений
data = {
'Имя': ['Чжан Сань', 'Ли Сы', 'Ван У', 'Чжао Лю'],
Телефон: ['138-0000-0000', '139-1111-1111', '137-2222-2222', '136-3333-3333'],
Remarks: [Normal, 'VIPclient', Normal, 'VIP customer']
}
df = pd.DataFrame(data)
print(“Исходные данные:”)
print(df)
print("=" * 50)
# Использовать регулярные выражения для замены разделителей в телефонных номерах
df_replaced = df.replace(to_replace=r'(d{3})-(d{4})-(d{4})', value=r'1****3', regex=True)
print(Данные после замены телефонных номеров (скрытие средних 4 цифр):)
print(df_replaced)
print("=" * 50)
# Заменить "VIP customer" в примечании (возможны различия в пробельных символах)
df_replaced2 = df.replace(to_replace=r'VIPs*Customers?', value='VIP', regex=True)
print(Данные после унификации VIP-примечаний:)
print(df_replaced2)
Ожидаемый вывод:
原始数据:
姓名 电话 备注
0 张三 138-0000-0000 正常
1 李四 139-1111-1111 VIP客户
2 王五 137-2222-2222 正常
3 赵六 136-3333-3333 VIP 客户
==================================================
替换电话号码(隐藏中间4位)后的数据:
姓名 电话 备注
0 张三 138****0000 正常
1 李四 139****1111 VIP客户
2 王五 137****2222 正常
3 赵六 136****3333 VIP 客户
==================================================
统一VIP备注后的数据:
姓名 电话 备注
0 张三 138-0000-0000 正常
1 李四 139-1111-1111 VIP
2 王五 137-2222-2222 正常
3 赵六 136-3333-3333 VIP
Анализ кода:
- В первом примере используется регулярное выражение
(d{3})-(d{4})-(d{4})чтобы сопоставить формат телефонного номера и заменить его на1****3, скрывая средние 4 цифры. - Во втором примере используется
VIPs*客户?чтобы сопоставлять оба формата "VIPclient" и "VIP client" и единообразно заменять их на "VIP".
Пример 5: Замена пропущенных значений NaN
replace()Его также можно использовать для замены пропущенных значенийNaN, что является распространённой операцией при очистке данных.
Пример
import numpy as np
# Создайте DataFrame с пропущенными значениями
data = {
'Имя': ['Чжан Сань', 'Ли Сы', 'Ван У', 'Чжао Лю'],
'Age': [25, np.nan, 35, np.nan],
'Salary': [5000, 6000, np.nan, 8000]
}
df = pd.DataFrame(data)
print("Исходные данные:")
print(df)
print("=" * 50)
# Замените NaN на 0
df_replaced = df.replace(np.nan, 0)
print("Данные после замены NaN на 0:")
print(df_replaced)
print("=" * 50)
# Замените NaN другими значениями, например "Unknown"
df_replaced2 = df.replace(np.nan, 'Unknown')
print("Данные после замены NaN на 'Unknown':")
print(df_replaced2)
Ожидаемый вывод:
原始数据:
姓名 年龄 薪资
0 张三 25.0 5000.0
1 李四 NaN 6000.0
2 王五 35.0 NaN
3 赵六 NaN 8000.0
==================================================
将 NaN 替换为 0 后的数据:
姓名 年龄 薪资
0 张三 25.0 5000
1 李四 0.0 6000
2 王五 35.0 0
3 赵六 0.0 8000
==================================================
将 NaN 替换为'未知'后的数据:
姓名 年龄 薪资
0 张三 25.0 5000.0
1 李四 未知 6000.0
2 王五 35.0 未知
3 赵六 未知 8000.0
Пояснение к коду:
np.nanобозначает пропущенные значения. Вы можете использоватьreplace(np.nan, value)чтобы заменить их.- Выберите подходящее значение для замены пропущенных значений с учётом типа данных и бизнес-требований.
Пример 6: Числовая замена
Вы можете заменить числовые данные, чтобы выполнить стандартизацию данных или обработку выбросов.
Пример
# Создать DataFrame, содержащий выбросы
data = {
'Студент': ['Чжан Сань', 'Ли Сы', 'Ван У', 'Zhao Liu', 'Qian Qi'],
'Балл': [85, 150, 78, 92, -10] # 150 и -10 — выбросы
}
df = pd.DataFrame(data)
print("Исходные данные:")
print(df)
print("=" * 50)
# Заменить выбросы значениями в разумном диапазоне
df_replaced = df.replace({150: 100, -10: 0})
print("Данные после замены выбросов:")
print(df_replaced)
print("=" * 50)
# Использовать условную логику для замены нескольких значений
df_replaced2 = df.replace(to_replace=[150, -10], value=[100, 0])
print("Использование списков для замены нескольких значений:")
print(df_replaced2)
Ожидаемый вывод:
原始数据:
学生 成绩
0 张三 85
1 李四 150
2 王五 78
3 赵六 92
4 钱七 -10
==================================================
将异常值替换后的数据:
学生 成绩
0 张三 85
1 李四 100
2 王五 78
3 赵六 92
4 钱七 0
==================================================
使用列表替换多个值:
学生 成绩
0 张三 85
1 李四 100
2 王五 78
3 赵六 92
4 钱七 0
Пояснение к коду:
- словарь
{150: 100, -10: 0}Заменить выброс 150 на 100, а -10 на 0. - list
[150, -10]и[100, 0]Укажите заменяемые значения и значения для замены соответственно, в соответствующем порядке.
Примечания
replace()По умолчанию исходный DataFrame не изменяется. Если вы хотите изменить его на месте, используйтеinplace=Trueпараметра.- При использовании регулярных выражений убедитесь, что синтаксис регулярного выражения правильный; сложные регулярные выражения могут привести к неожиданным результатам.
- Замена основана на совпадении значений и не изменяет тип данных.
- Обратите внимание на регистрозависимость; "Technology" и "Technology" — разные значения.
- Перед заменой данных рекомендуется создать резервную копию исходных данных для сравнения и прослеживаемости.
Другие расширения