我有一个姓名数据集。
根据名称的字母数字字符串,我需要将它们映射到子名称,如下所示。
Name Subname
9-AIF-09 9A09
980-PD-Z09A 980P09
15-KIC-12 15K12
PIA-110H P-110
IC009A I009A
可以定义规则,例如,如果名称中存在“A”,则保留所有数字和字母“A”,名称中存在“P”,则仅保留“P”。
算法本身必须识别关于如何完成映射的模式。
是否有任何算法可以用来识别训练数据集中的模式以进一步预测。
我看到两个选择。
获取 3 组(第一个字母之前、第一个字母之前、第一个字母之后)并删除第 1 组和第 3 组中的所有非数字:
import re
df['Subname'] = df['Name'].str.replace(r'([^a-zA-Z]+)([a-zA-Z])(.*)',
lambda m: (re.sub('\D', '', m.group(1))
+m.group(2)
+re.sub('\D', '', m.group(3))),
regex=True)
或者,定义一个模式:非数字/数字/非数字/字母/非数字/数字/非数字:
df['Subname'] = (df['Name'].str.extract(r'\D*(\d+)[^\da-zA-Z]*([a-zA-Z])\D*(\d+)')
.agg(''.join, axis=1)
)
output
Name Subname
0 9-AIF-09 9A09
1 980-PD-Z09A 980P09
2 15-KIC-12 15K12
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)