【问题标题】:In Dataframe, remove parentheses and dash from phone number在 Dataframe 中,从电话号码中删除括号和破折号
【发布时间】:2022-09-22 21:54:25
【问题描述】:

在数据框中,如何从联系电话中删除不必要的东西

df

Id Phone
1  (+1)123-456-7890
2  (123)-(456)-(7890)
3  123-456-7890

最终输出

Id  Phone
1   1234567890
2   1234567890
3   1234567890
  • 您如何确定 (123)(456)(7890) 是必要的,但 (+1) 不是?如果你遇到一个实际的国际号码,其中领先(+国家代码) 是不是无关的?

标签: python pandas dataframe


【解决方案1】:

我会在这里使用带有str.replace 的正则表达式:

df['Phone2'] = df['Phone'].str.replace(r'^(?:\(\+\d+\))|\D', '', regex=True)

输出:

   Id               Phone      Phone2
0   1    (+1)123-456-7890  1234567890
1   2  (123)-(456)-(7890)  1234567890
2   3        123-456-7890  1234567890

正则表达式:

^(?:\(\+\d+\)) # match a (+0) leading identifier
|              # OR
\D             # match a non-digit

regex demo

关于国际前缀的注释:

这可能很重要。

保留前缀:

df['Phone2'] = df['Phone'].str.replace(r'[^+\d]', '', regex=True)

输出:

   Id               Phone          Phone2
0   1    (+1)123-456-7890    +11234567890
1   2  (123)-(456)-(7890)      1234567890
2   3        123-456-7890      1234567890
3   4  (+380)123-456-7890  +3801234567890

仅删除特定前缀(此处为 +1):

df['Phone2'] = df['Phone'].str.replace(r'^(?:\(\+1\))|[^+\d]', '', regex=True)
# or, more flexible
df['Phone2'] = df['Phone'].str.replace(r'(?:\+1\D)|[^+\d]', '', regex=True)

输出:

   Id               Phone          Phone2
0   1    (+1)123-456-7890      1234567890
1   2  (123)-(456)-(7890)      1234567890
2   3        123-456-7890      1234567890
3   4  (+380)123-456-7890  +3801234567890

【讨论】:

  • 我可能会将 (+1) 匹配限制为仅匹配加号后的单个 1 而不是任何数字序列;否则,您将丢弃部分非美国电话号码。也许限制非数字替代以单独留下+(当不属于(+1) 案例时),因为它是标准国际格式的一部分。
  • @MarkReed 我将在国际前缀上添加一些注释。我承认我回答了字面问题;)
猜你喜欢
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 2016-10-31
  • 2013-06-03
  • 2016-08-18
  • 2015-09-29
  • 1970-01-01
相关资源
最近更新 更多