Функция для замены дубликатов
Есть data series с названиями населенных пунктов в разном написании, которые нужно привести к единому виду. Например, вместо МО, Подмосковье и Моск. обл. везде должно стоять "Московская область". Таких серий много. Решение мне видится в создании словаря, в котором ключом будет правильное название, а значениями - все вариации написания, которые нужно выловить и заменить. Видимо, нужно написать функцию, которая будет это делать. Но мне не хватает опыта написать правильно. Пробовала просто функцию написать, но не работает. Буду очень благодарна за помощь с функцией для словаря!
def duplicates (col, (oldvalues), newvalue):
duplicates=oldvalue
name=newvalue
col=col.replace(duplicates, name, regex=True)
return df[col]
duplicates (df['1_çity'], 'Подмосковье', 'Московская область')
Ответы (2 шт):
Обычный replace, котрый работает со словарем замен
import pandas as pd
df = pd.DataFrame({'city': ['МО', 'Подмосковье', 'Моск. обл.']})
print(df)
city
0 МО
1 Подмосковье
2 Моск. обл.
# нужно подготовить словарь, можете, например, так
lst = ['МО', 'Подмосковье', 'Моск. обл.']
replace_dict = {x: 'Московская область' for x in lst}
df.city = df.city.replace(replace_dict, regex=False )
print(df)
city
0 Московская область
1 Московская область
2 Московская область
немного подправить ваш код и он заработает: параметр regex должен быть равен False, ну и df[col] в return это ошибка. Теперь должно работать:
def duplicates(col, oldvalues, newvalue):
col = col.replace(oldvalues, newvalue, regex=False)
return col
duplicates(df['1_çity'], ['МО', 'Подмосковье', 'Моск. обл.'], 'Московская область')
UPD
А как быть, если таких строчек несколько: dupl= {'Московская область': 'МО', 'Подмосковье','Мособласть' 'Ленинградская область': 'Комарово', 'Ленобласть'}?
в таком случае пригодится параметр regex=True, ну и соответственно надо подготовить списки для замены:
df = pd.DataFrame({'city': ['МО', 'Подмосковье', 'Моск. обл.','Ленобласть', 'Лен. обл.']})
'''
city
0 МО
1 Подмосковье
2 Моск. обл.
3 Ленобласть
4 Лен. обл.
'''
lst = [['МО', 'Подмосковье', 'Моск. обл.'],['Ленобласть','Лен. обл.']]
new = ['Московская область','Ленинградская область']
df.city.replace(list(map('|'.join, lst)), new, regex=True)
>>>
'''
0 Московская область
1 Московская область
2 Московская область
3 Ленинградская область
4 Ленинградская область
Name: city, dtype: object