如何从Python中的数据框列中的字符串中删除非字母数字字符?

时间:2017-09-15 13:46:19

标签: python regex pandas dataframe

我有一个DF列,里面有很多字符串。我需要从该列中删除所有非字母数字字符:即:

df['strings'] = ["a#bc1!","a(b$c"]

运行代码:

Print(df['strings']): ['abc','abc']

我试过了:

df['strings'].replace([',','.','/','"',':',';','!','@','#','$','%',"'","*","(",")","&",],"")

但这不起作用,我觉得应该有一种更有效的方法来使用正则表达式来做到这一点。任何帮助都将非常感激。

3 个答案:

答案 0 :(得分:8)

使用str.replace

df
  strings
0  a#bc1!
1   a(b$c

df.strings.str.replace('[^a-zA-Z]', '')
0    abc
1    abc
Name: strings, dtype: object

要保留字母数字字符(不仅仅是字母表符合您的预期输出所示),您还需要:

df.strings.str.replace('\W', '')
0    abc1
1     abc
Name: strings, dtype: object 

答案 1 :(得分:3)

由于您编写了字母数字,因此需要在正则表达式中添加0-9。 但也许你只想要字母......

import pandas as pd

ded = pd.DataFrame({'strings': ['a#bc1!', 'a(b$c']})

ded.strings.str.replace('[^a-zA-Z0-9]', '')

但它基本上是COLDSPEED所写的

答案 2 :(得分:1)

您也可以使用正则表达式

import re

regex = re.compile('[^a-zA-Z]')

l = ["a#bc1!","a(b$c"]

print [regex.sub('', i) for i in l]

['abc', 'abc']