我有一个如下所示的数据框:
description
1906 RES 330 ML
1906 RES 330ML
RES 335 c/6
RES 332 c/12
我想提取数字的连续三位数字并将其保存在新列“volume”中。
我的代码是这样的:
df['volume'] = df['description'].str.extract('([([\d]*[\d]){3,3}?])')
预期的结果应该是这样的:
volume
330
330
335
332
然而,它给出的结果是这样的:
volume
1906
1906
335
332
谁能帮我修复这段代码?非常感谢!!!
可能有点矫枉过正,但如果你想确保你不捕获属于 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
指定 expand=False
, 以便匹配作为一个 pd.Series
返回仅。
正则表达式:
-
(?<!\d)
- 指定一组 3 位数字之前的任何内容都不是数字
-
(\d{3})
- 匹配 3 位数字
-
(?!\d)
- 指定一组 3 位数字之后的任何内容都不是数字