我有以下格式的数据流:
from StringIO import StringIO
data ="""\
ANI/IP
sip:5554447777@10.94.2.15
sip:10.66.7.34@6665554444
sip:3337775555@10.94.2.11
"""
import pandas as pd
df = pd.read_table(StringIO(data),sep='\s+',dtype='str')
我想做的是用上面字符串的电话号码部分替换列内容。我尝试了这个 thread 中的建议像这样:
df['ANI/IP'] = df['ANI/IP'].str.replace(r'\d{10}', '').astype('str')
print(df)
但是,这会导致:
.....print(df)
ANI/IP
0 sip:@10.94.2.15
1 sip:@10.66.7.34
2 sip:@10.94.2.11
我需要电话号码,那么我该如何实现呢? :
ANI/IP
0 5554447777
1 6665554444
2 3337775555
请您参考如下方法:
正则表达式 \d{10} 搜索长度正好为 10 个字符的数字子串。
df['ANI/IP'] = df['ANI/IP'].str.replace(r'\d{10}', '').astype('str')
这会删除数字!
注意:您不应该执行 astype str(它不需要并且 pandas 中没有 str dtype)。
您想extract这些电话号码:
In [11]: df["ANI/IP"].str.extract(r'(\d{10})') # before overwriting!
Out[11]:
0 5554447777
1 6665554444
2 3337775555
Name: ANI/IP, dtype: object
将其设置为另一列,您就离开了:
In [12]: df["phone_number"] = df["ANI/IP"].str.extract(r'(\d{10})')
