Коротко
replace(старое, новое)заменяет целые значения ячеек. Подстроку внутри текста меняет.str.replace.- Словарь
{старое: новое}— несколько замен сразу; список старых значений — все в одно новое. - Вложенный словарь
{"столбец": {старое: новое}}— замены только в указанных столбцах. regex=True— старое значение как регулярное выражение.replaceоставляет незнакомые значения как есть, аmapсо словарём превращает их вNaN.
Синтаксис
s.replace(old, new)
s.replace({"a": "b", "c": "d"})
df.replace(["x", "y"], np.nan)
df.replace({"col": {old: new}})
s.replace(pattern, new, regex=True)Параметры
ПараметрЧто делаетПо умолчанию
to_replaceчто заменить: значение, список, словарь, регулярное выражениеобязательныйvalueна что заменить; не нужен, если to_replace — словарь заменNoneregexсчитать to_replace регулярным выражениемFalseinplaceизменить на месте; в pandas 3 возвращает саму таблицуFalseПримеры
survey = pd.DataFrame({
"city": ["Спб", "Москва", "С.-Петербург", "мск", "Москва"],
"answer": ["да", "нет", "н/д", "да", "-"],
"score": [5, -1, 4, 3, -1], # -1 — «нет ответа»
})survey["score"].replace(-1, np.nan)Вывод
0 5.0 1 NaN 2 4.0 3 3.0 4 NaN Name: score, dtype: float64
survey["city"].replace({"Спб": "Санкт-Петербург", "С.-Петербург": "Санкт-Петербург", "мск": "Москва"})Вывод
0 Санкт-Петербург 1 Москва 2 Санкт-Петербург 3 Москва 4 Москва Name: city, dtype: str
survey.replace(["н/д", "-"], np.nan) # несколько значений — в одноВывод
city answer score 0 Спб да 5 1 Москва нет -1 2 С.-Петербург NaN 4 3 мск да 3 4 Москва NaN -1
survey.replace({"answer": {"да": "yes", "нет": "no"}, "score": {-1: 0}})Вывод
city answer score 0 Спб yes 5 1 Москва no 0 2 С.-Петербург н/д 4 3 мск yes 3 4 Москва - 0
survey["city"].replace(r"^С.*[Пп]етербург$|^Спб$", "Санкт-Петербург", regex=True)Вывод
0 Санкт-Петербург 1 Москва 2 Санкт-Петербург 3 мск 4 Москва Name: city, dtype: str
Подводные камни
replace меняет только целые значения
Чтобы заменить часть текста, нужен .str.replace — см. строки.
print(survey["city"].replace("Москва", "МСК").tolist()) # только целое значение
survey["city"].str.replace("о", "0").tolist() # подстрока — это .str.replaceВывод
['Спб', 'МСК', 'С.-Петербург', 'мск', 'МСК'] ['Спб', 'М0сква', 'С.-Петербург', 'мск', 'М0сква']
replace и map со словарём
codes = {"да": 1, "нет": 0}
print(survey["answer"].replace(codes).tolist()) # незнакомые значения остаются
survey["answer"].map(codes).tolist() # незнакомые — NaNВывод
[1, 0, 'н/д', 1, '-'] [1.0, 0.0, nan, 1.0, nan]
inplace=True возвращает таблицу
result = survey.replace(-1, 0, inplace=True)
result is survey # pandas 3: inplace возвращает саму таблицуВывод
True