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

Rah*_*ava 7 python string pandas

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

这是链接.我想用re模块.

表:

A    B    C    D
1    Q!   W@   2
2    1$   E%   3
3    S2#  D!   4
Run Code Online (Sandbox Code Playgroud)

在这里,我想从column B和删除特殊字符C.我已经使用.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
Run Code Online (Sandbox Code Playgroud)

我的代码:

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

它只有在我知道什么是特殊字符时才有用.

但我想使用re哪种方式最好.

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

我在这里得到错误:

TypeError: expected string or buffer
Run Code Online (Sandbox Code Playgroud)

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

Ami*_*ani 10

一个没有的衬里lamda是:

df['E'] = df['B'].str.replace('\W', '')
Run Code Online (Sandbox Code Playgroud)

  • 这是解决 OP 问题的一个很好的解决方案,但请注意,它也会删除空格。如果你想保留空格,请使用: `df['B'].str.replace('[^\w\s]', '')` (9认同)

Tig*_*kT3 7

该答案所示,您可以使用将汇编并返回您喜欢的任何表达式map()lambda函数:

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

lambda简单地定义匿名函数。您可以将它们保留为匿名状态,或像其他任何对象一样将它们分配给引用。my_function = lambda x: x.my_method(3)等同于def my_function(x): return x.my_method(3)