我正在尝试在pandas系列上使用str.extract('(\ d +)')方法来获取看起来像这样的电话号码的数字:(123)456-7890
使用此方法仅返回123,但我希望输出为1234567890
一般来说,我想知道如何从字符串中获取所有数字,而不必担心组。
由于
答案 0 :(得分:3)
来源DF:
In [66]: x
Out[66]:
phone
0 (123) 456-7890
1 +321 / 555-7890
2 (111) - 666 7890
在这种情况下,使用'\D+'
RegEx删除所有非数字会更容易,因为它会处理任何类型的电话格式(如+123 456789
或(123) / 456-789
等) :
In [67]: x['clean'] = x.phone.str.replace(r'\D+', '')
In [68]: x
Out[68]:
phone clean
0 (123) 456-7890 1234567890
1 +321 / 555-7890 3215557890
2 (111) - 666 7890 1116667890
使用Series.str.extract
,您需要编写非常复杂的RegEx来解析不同的手机#格式
答案 1 :(得分:1)
df = pd.DataFrame({'no': ['(123) 456-7890', '+321 / 555-7890']})
df['clean'] = df.no.str.extractall('(\d+)').unstack().apply(''.join, axis=1)
结果:
no clean
0 (123) 456-7890 1234567890
1 +321 / 555-7890 3215557890
答案 2 :(得分:0)
或者您也可以使用熊猫替换方法,
mypatch.patch
或者如果您想覆盖列本身,请使用
df['clean'] = df['phone'].replace('\D+', '', regex = True)