我试图根据一种模式来区分名字和第二个名字。 但我不想分开,如果这种模式以数字形式出现
输入:
name
john 6/1
park/avenue 34/45
eela 21/22
shaun 21/22
shaun/paul 77/78
代码:
import pandas as pd
import re
import pandas as pd
import re
df1=pd.read_csv('bg.txt',sep='\t')
df1['split?']=df1['name1'].apply(lambda a: 'yes' if (re.search('[^\d+\/d+]',a) and re.search('[\u0061-\u007A]',a)) else 'no')
df1['name_2'] = df1[df1['split?']=='yes']['name1'].apply (lambda b: b.split('/')[1])
print(df1)
预期产出:
name1 split? name2
john 6/1 no null
park/avenue 34/45 yes avenue
eela 21/22 no null
shaun 21/22 no null
shaun/paul 77/78 yes paul
mark/tyson yes tyson
您可以使用类似
[^\W\d_]+/([^\W\d_]+)
的模式匹配1+Unicode字母,然后/
,然后捕获组1中的1+Unicode字母。可能,将其与单词边界一起使用,以仅匹配整个单词:要使用
null
而不是NaN
,可以添加df['name2'] = df['name2'].fillna('null')
行Python演示:
输出:
可以将^{} 与以下模式一起使用:
使用
str.extract
Ex:
输出:
相关问题 更多 >
编程相关推荐