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)
任何人都可以帮我修复此代码吗?非常感谢!!!
可能有点矫枉过正,但如果你想确保不捕获属于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位数之后的任何内容都不是数字