使用正则表达式 pandas 进行数据清理

Data cleaning with pandas using regular expressions

我有几个这样的正则表达式,

Data['SUMMARY']=Data['SUMMARY'].str.replace(r'([^\w])',' ')
Data['SUMMARY']=Data['SUMMARY'].str.replace(r'x{2,}',' ')
Data['SUMMARY']=Data['SUMMARY'].str.replace(r'_+',' ')
Data['SUMMARY']=Data['SUMMARY'].str.replace(r'\d+',' ')
Data['SUMMARY']=Data['SUMMARY'].str.replace(r'\s{2,}',' ')

我想将所有标点符号、XXXXXXXX、所有数字、所有非字母数字替换为空字符串 ''。如何将它们合并为一个替换正则表达式?

所以你想删除(根据你的问题)

  1. 标点符号
  2. X{2,}
  3. 位数
  4. 任何不是字母或数字的东西

这里有重叠的主题。您希望只保留字母和单个空格。您可以将单独的模式压缩为一个模式 -

df = pd.DataFrame({'SUMMARY' : ['hello, world!', 'XXXXX test', '123four, five:; six...']})

df

                  SUMMARY
0           hello, world!
1              XXXXX test
2  123four, five:; six...

df.SUMMARY.str.replace(r'[^a-zA-Z\s]+|X{2,}', '')

0      hello world
1             test
2    four five six
Name: SUMMARY, dtype: object

如果您的列有两个或更多空格,您必须单独调用并替换它们。

df.SUMMARY = df.SUMMARY.str.replace(r'[^a-zA-Z\s]+|X{2,}', '')\
                       .str.replace(r'\s{2,}', ' ')

如果你想替换 x 的小写和大写 2 or more occurrences 并且你还想用空字符串替换空格(其他空白字符):

(?i)([^a-z]+|X{2,})

如果你想保留空白字符,如果你想替换 2 x 或更多的小写和大写链,请使用:

(?i)([^a-z\s]+|X{2,})

如果您只想删除 2 X 或更多的大写链并保留 x 的小写链:

([^a-zA-Z\s]+|X{2,})