Skip to main content
 首页 » 编程设计

python之通过正则表达式用自身的子集替换 Pandas 列

2025年05月04日62kenshinobiy

我有以下格式的数据流:

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})')