python 如果电话号码具有不同的国家/地区代码,则最佳清理方法

7d7tgy0s  于 2023-01-16  发布在  Python
关注(0)|答案(1)|浏览(193)

我最理想的是这种特殊格式的数据。我在下面展示了一些数据,以获得一些想法
| 国家代码|电话号码|更正的电话号码|
| - ------|- ------|- ------|
| 英国|0131 496 0902|+441314960902|
| 英国|小行星0141|+441414960760|
| 英国|+44117 4960589|+441174960589|
| 美国|小行星191|+11910400076x2520|
| 数据元素|05532五六九九四|+49553256994|
| 英国|01514960233||
| 英国|(零一一八)4960720|+441184960720|
| 英国|+44(0)114 4960045||
| 数据元素|+49(0)1743095110||
| 英国|+44(0)1632 960 720||
| 英国|+44117 496 0381||
我没有填写所有正确的号码,但我尝试的是,首先使用regex取出所有电话号码中的任何括号和圆点,然后将0替换为国家代码,这将是从字典,即

{
    GB : +44
    DE : +49
    US : +1
}

自从匹配括号模式导致一些问题后,这对我来说就不起作用了。

n3h0vuf2

n3h0vuf21#

该逻辑可以随着电话号码格式的规则而改变;但符合您要求的逻辑如下:

  • 删除除数字、+和用于扩展的字母以外的特殊字符,例如xext(以下保留所有字母)。
  • 前缀ISD代码匹配国家代码。
  • 删除ISD代码后面的0
df = pd.DataFrame(data=[["GB","0131 496 0902"],["GB","0141 4960760"],["GB","+44117 4960589"],["US","191.040.0076x2520"],["DE","05532 56994"],["GB","01514960233"],["GB","(0118)4960720"],["GB","+44(0)114 4960045"],["DE","+49(0)1743095110"],["GB","+44(0)1632 960 720"],["GB","+44117 496 0381"]], columns=["Country Code","Phone_number"])
isd_code_map = { "GB": "+44", "DE": "+49", "US": "+1" }

def correct_phone_number(row):
  import re
  # Remove special chars other than digits, `+` and letters used for extension e.g. `x`, `ext` (following keeps all alphabets).
  result = re.sub("[^A-Za-z\d\+]", "", row["Phone_number"])
  
  # Prefix ISD code by matching country code.
  if not result.startswith(isd_code_map[row["Country Code"]]):
    result = isd_code_map[row["Country Code"]] + result

  # Remove `0` that follows ISD code.
  if result.startswith(isd_code_map[row["Country Code"]] + "0"):
    result = result.replace(isd_code_map[row["Country Code"]] + "0", isd_code_map[row["Country Code"]])
  return result

df["Corrected Phone Number"] = df.apply(correct_phone_number, axis=1)

print(df)

输出:

Country Code        Phone_number Corrected Phone Number
0            GB       0131 496 0902          +441314960902
1            GB        0141 4960760          +441414960760
2            GB      +44117 4960589          +441174960589
3            US   191.040.0076x2520      +11910400076x2520
4            DE         05532 56994           +49553256994
5            GB         01514960233          +441514960233
6            GB       (0118)4960720          +441184960720
7            GB   +44(0)114 4960045          +441144960045
8            DE    +49(0)1743095110          +491743095110
9            GB  +44(0)1632 960 720          +441632960720
10           GB     +44117 496 0381          +441174960381

相关问题