如何从python中的字符串中提取一定数量的数字?

Els*_* Li 1 python regex string dataframe pandas

我有一个如下所示的数据框:

description     
1906 RES 330 ML
1906 RES 330ML
RES 335 c/6
RES 332 c/12
Run Code Online (Sandbox Code Playgroud)

我想提取数字的三个连续数字并将其保存在新列"体积"中.我的代码是这样的:

df['volume'] = df['description'].str.extract('([([\d]*[\d]){3,3}?])')
Run Code Online (Sandbox Code Playgroud)

预期的结果应该是这样的:

volume
330
330
335
332
Run Code Online (Sandbox Code Playgroud)

但是,它给出了如下结果:

volume
1906
1906
335
332
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我修复此代码吗?非常感谢!!!

cs9*_*s95 5

可能有点矫枉过正,但如果你想确保不捕获属于4位数字的数字,你可以使用:

df['volume'] = df.description.str.extract(r'(?<!\d)(\d{3})(?!\d)', expand=False)    
print(df)

       description volume
0  1906 RES 330 ML    330
1   1906 RES 330ML    330
2      RES 335 c/6    335
3     RES 332 c/12    332
Run Code Online (Sandbox Code Playgroud)

指定expand=False,以便匹配仅作为一个返回pd.Series.


正则表达式:

  • (?<!\d) - 指定一组3位数之前的任何内容都不是数字
  • (\d{3}) - 匹配3位数
  • (?!\d) - 指定一组3位数之后的任何内容都不是数字