我试图从Pandas中的子字符串中提取特定字符以填充新列。每行都有类似的格式,但不够相似,只能切片。下面的每一行都是一列中的字符串:
frog (1 column-string)
_______________________________________________
1 OU812 2687BA LM356 6342HK BLAD HA43S
2 OU635 GH3S5 3211CF SHN1 5875HK BOOD FR53G
3 OU525 3414MF 5385HK ASD28 6338HK OR53J
最终我要隔离第一个子字符串前面的三个数字(忽略第一个字符串)以HK结尾,所以第1行是342,2是875,3是385。
我的假设是我需要提取以HK结尾的6个字符然后切出我需要的三个字符(如果有人有关于如何跳过这一步的想法也会很棒)。
我的主要问题是我使用的代码返回错误的项目数量#34;错误。
df['crunch'] = df['frog'].str.extract("(\d{4})(HK)?", expand=True)
我曾经想过那个?会阻止代码获得超过一个实例但但似乎并非如此。
答案 0 :(得分:2)
IIUC,您只有一列 - frog
:
In [217]: df
Out[217]:
frog
1 OU812 2687BA LM356 6342HK BLAD HA43S
2 OU635 GH3S5 3211CF SHN1 5875HK BOOD F...
3 OU525 3414MF 5385HK ASD28 6338HK OR53J
In [218]: df['crunch'] = df['frog'].str.extract(r'\s+\d(\d+)HK\s+', expand=True)
In [219]: df
Out[219]:
frog crunch
1 OU812 2687BA LM356 6342HK BLAD HA43S 342
2 OU635 GH3S5 3211CF SHN1 5875HK BOOD F... 875
3 OU525 3414MF 5385HK ASD28 6338HK OR53J 385
为什么你的代码不起作用?
您在RegEx中指定了两个捕获组(在括号中):
In [202]: df['frog'].str.extract("(\d{4})(HK)?", expand=True)
Out[202]:
0 1
1 6342 HK
2 5875 HK
3 5385 HK
并且您尝试将这两列分配到单个列frog