首页 > 解决方案 > 使用 python 正则表达式提取项目编号

问题描述

今天是个好日子。我想从project_name列中提取斜杠符号后的最后一位数字。目前,我正在研究它,但有一些问题如下:

  1. 如何提取斜杠符号后的最后一位数字而不得到带有方括号的结果?因为现在我的代码几乎可以工作,但结果总是有一个方括号

我的代码:

def project_name(name):
    return re.findall(r'\d{3}$',name)

data['project_name'] = data['project_name'].apply(project_name)

数据:

project_name    
 ----------
   ASAHI,PT-PRO/PTN/06-2012/192          
   CIMB NIAGA-PRO/PTN/06-2012/174        
   FRAMAS INDONESIA-PRO/PTN/06-2012/210    
   DM STOCK 2015   
   PERBAIKAN OH TM 366 PLANT DAWUAN 
   Ruko-PRO/PTN/03-2012/47

我的输出:

 (Expected)project_name   
 ----------     
   192            
   174            
   210            
   NaN
   NaN            
   NaN            
    47            

感谢所有建议和意见。感谢大家

标签: pythonregexpandas

解决方案


使用Series.str.extract并添加/到正则表达式:

data['project_name'] = data['project_name'].str.extract(r'/(\d{3}$)')
print (data)
  project_name
0          192
1          174
2          210
3          NaN
4          NaN
5          NaN
6          NaN

解决方案findall

data['project_name'] = data['project_name'].str.findall(r'/(\d{3}$)').str[0]

如果不匹配,您的解决方案应该更改为nextiter返回默认值:np.nan

def project_name(name):
    return next(iter(re.findall(r'/(\d{3})$',name)), np.nan)

data['project_name'] = data['project_name'].apply(project_name)
print (data)
  project_name
0          192
1          174
2          210
3          NaN
4          NaN
5          NaN
6          NaN

推荐阅读