Pandas RegEx提取子字符串的首次匹配,错误的项目数量传递

时间:2017-10-07 14:32:39

标签: python regex string pandas

我试图从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)
我曾经想过那个?会阻止代码获得超过一个实例但但似乎并非如此。

1 个答案:

答案 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