[英]How to extract certain length of numbers from a string in python? [duplicate]
我有一个看起来像这样的数据框:
description
1906 RES 330 ML
1906 RES 330ML
RES 335 c/6
RES 332 c/12
我想提取数字的三个连续数字并将其保存在新的“音量”列中。 我的代码是这样的:
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 位数字之后的任何内容都不是数字你需要
[\\d]*
\\b
?
[]
您不需要:
()
此正则表达式将仅找到三位数字:
\b(\d{3})\b
您正在寻找的正则表达式是\\b[\\d]{3}\\b
有关\\b
更多信息,请参阅文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.