首页 > 解决方案 > 摆脱 Pandas DF 上的电话号码扩展

问题描述

我有许多不同格式的电话号码列表,但我需要提取典型的 10 位格式“区号 + 电话号码”。

我已成功删除标点符号,但一些讨厌的电话号码上有扩展名。我想我会创建一个长度列,然后有某种条件,如果电话号码长度大于 10,则只删除最后 4 个字符。

下面是我的数据的示例。第一个电话号码不应丢失任何数字;第二个应该失去“1401”

phone = pd.DataFrame({'PN':['1234567891', '1234567891 1401'],'length':[10,16]})

我试图用 re.sub 替换这最后四位数字,但我似乎做错了。

phone[phone['length']>10]= re.sub(r'\d{4}$', '', phone['PN'])

这也不起作用:

phone[phone['length']>10,'PN']=phone.loc[phone['length']>10]['PN'].str.replace('\d{4}$', '')

我得到一个“'系列'对象是可变的,因此它们不能被散列”错误,但我不知道它是什么意思或如何解决它。有什么建议么?

标签: pythonregexpandasindexing

解决方案


也许您可以将 slice 用作:

phone['PN'] = phone['PN'].str.slice(0, 10)

或者,

phone['PN'] = phone['PN'].str[:10]


推荐阅读