如何使用模块re从数据框列中删除特殊characers?

时间:2015-10-21 10:49:30

标签: python string pandas

嘿,我已经看到了这个链接,但在那里他们没有使用re模块,这就是我在这里发布的原因。希望您理解并删除副本。

这是Link。我想使用re模块。

表:

A    B    C    D
1    Q!   W@   2
2    1$   E%   3
3    S2#  D!   4

此处我想删除column BC中的特殊字符。我使用了.transform(),但我希望尽可能使用re但我收到错误。

输出:

A    B    C    D   E   F
1    Q!   W@   2   Q   W
2    1$   E%   3   1   E
3    S2#  D!   4   S2  D

我的代码:

df['E'] = df['B'].str.translate(None, ",!.; -@!%^&*)(")

只有在我知道什么是特殊字符时才能正常工作。

但我想使用re这是最好的方式。

import re
#re.sub(r'\W+', '', your_string)
df['E'] = re.sub(r'\W+', '', df['B'].str)

我在这里收到错误:

TypeError: expected string or buffer

那么我应该如何传递该值以获得正确的输出。

2 个答案:

答案 0 :(得分:6)

没有lamda的单行内容是:

df['E'] = df['B'].str.replace('\W', '')

答案 1 :(得分:5)

正如this answer所示,您可以将map()lambda函数结合使用,该函数将汇总并返回您喜欢的任何表达式:

df['E'] = df['B'].map(lambda x: re.sub(r'\W+', '', x))

lambda只是定义了匿名函数。您可以匿名保留它们,也可以像任何其他对象一样将它们分配给引用。 my_function = lambda x: x.my_method(3)相当于def my_function(x): return x.my_method(3)