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

时间:2017-12-22 08:42:59

标签: python regex pandas data-cleaning

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

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,所有数字,所有非字母数字替换为空字符串''。如何将其全部合并为一个替换正则表达式?

2 个答案:

答案 0 :(得分:2)

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

  1. 标点符号
  2. X{2,}
  3. digits
  4. 任何不是字母或数字的内容
  5. 这里有重叠的主题。您希望仅保留字母和单个空格。您可以将单独的模式压缩为单个模式 -

    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,}', ' ')
    

答案 1 :(得分:0)

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

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

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

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

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

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