Как привести номера телефонов к одному варианту написания?
Есть df c одним столбцом Телефон:
df.dtypes
Телефон object
dtype: object
Содержит следующие данные:
Телефон
(495) 689-53-25
84951491991
(903)748-12-92
+7 (499) 250-69-83
8(495) 797-55-76
Как привести их к виду: 79995551111?
Ответы (3 шт):
Автор решения: MaxU
→ Ссылка
Воспользуйтесь методом Series.str.replace():
df["Телефон"] = df["Телефон"].str.replace("\D", "", regex=True)
Пример:
In [182]: df
Out[182]:
Телефон
0 (495) 689-53-25
1 84951491991
2 (903)748-12-92
3 +7 (499) 250-69-83
4 8(495) 797-55-76
In [183]: df["Телефон"] = df["Телефон"].str.replace("\D", "", regex=True)
In [184]: df
Out[184]:
Телефон
0 4956895325
1 84951491991
2 9037481292
3 74992506983
4 84957975576
Автор решения: eri
→ Ссылка
Библиотекой phonenumbers можно привести к формату +79123456789
phonenumbers.format_number(x, phonenumbers.PhoneNumberFormat.E164)
и можно добавить код страны и исправить '89XX', '9XX', '495'
x = phonenumbers.parse("(495) 689-53-25", "RU")
Вывод
>>> import phonenumbers
>>> x = phonenumbers.parse("(495) 689-53-25", "RU")
>>> x
PhoneNumber(country_code=7, national_number=4956895325, extension=None, italian_leading_zero=None, number_of_leading_zeros=None, country_code_source=0, preferred_domestic_carrier_code=None)
>>> phonenumbers.format_number(x, phonenumbers.PhoneNumberFormat.E164)
'+74956895325'
>>>
Автор решения: Namerek
→ Ссылка
Немного разовью мысль @eri
from phonenumbers import parse, format_number, PhoneNumberFormat
s = [
'(495) 689-53-25',
'84951491991',
'(903)748-12-92',
'+7 (499) 250-69-83',
'8(495) 797-55-76',
]
def normalize_number(num: str):
number = parse(num, "RU")
return format_number(number, PhoneNumberFormat.E164)
print(*map(normalize_number, s), sep='\n')
# +74956895325
# +74951491991
# +79037481292
# +74992506983
# +74957975576