从熊猫系列中提取所有数字字符(所有组)

时间:2017-05-09 17:28:13

标签: regex string pandas series

我正在尝试在pandas系列上使用str.extract('(\ d +)')方法来获取看起来像这样的电话号码的数字:(123)456-7890

使用此方法仅返回123,但我希望输出为1234567890

一般来说,我想知道如何从字符串中获取所有数字,而不必担心组。

由于

3 个答案:

答案 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)