使用正则表达式模式替换后跟子字符串的数字或后跟空格的数字,然后再替换子字符串

2024-05-13 08:38:05 发布

您现在位置:Python中文网/ 问答频道 /正文

对于pandas数据帧中的列,我希望删除紧跟在“gb”或“mb”之后的任何数字,或者删除中间有空格的所有数字。即删除字符串,如“500GB”和“500mb”

    Column_To_Fix
0   coolblue 100gb
1   connector 500 mb for thing
2   5gb for user
3   load 800 mb
4   1000 add-on
5   20 gb 

下面的函数仅适用于第0行和第2行,不确定如何添加图案的空间要求:

pat = '(^|\s)\d+(gb|mb)($|\s)'
df['Column_To_Fix'].str.lower().replace(pat, ' ', regex=True)

期望输出:

    Column_To_Fix
0   coolblue
1   connector for thing
2   for user
3   load
4   1000 add-on
5   

Tags: toaddforconnectoronloadcolumn数字
2条回答

试试这个模式

pat = '\d+ *(gb|mb)'

df['Column_To_Fix'].str.lower().str.replace(pat, ' ')

Out[462]:
0               coolblue
1    connector   for thing
2                 for user
3                   load
4              1000 add-on
5
Name: Column_To_Fix, dtype: object

如果你喜欢series.replace

df['Column_To_Fix'].str.lower().replace(pat, ' ', regex=True)

我假设文本是(没有行号):

coolblue 100gb
connector 500 mb for thing
5gb for user
load 800 mb
1000 add-on
20 gb

期望的结果(保持适当的对齐和间距)是:

coolblue
connector for thing
for user
load
1000 add-on

最后一行有一个空字符串。这可以通过用空字符串替换以下正则表达式的匹配项来实现(使用re.sub

r'(?:^\d+ ?[gm]b | \d+ ?[gm]b(?= |$))'

Demo

相关问题 更多 >