去除Pandas数据框中的所有特殊字符。

5

我在尝试从我的Pandas数据框中删除所有特殊字符却遇到了问题。你可以帮我解决吗?

我尝试过类似于这样的方法:

df = df.replace(r'\W+', '', regex=True)

因为我在最近的一篇帖子中找到了它。 但是当我执行时,特殊字符“'”例如不会消失。

我知道在PostgresSQL中有类似[^\w]的东西可以获得一个特定的列表。 Python中是否有类似的东西可以做到:

a)仅保留字母

b)仅保留数字

c)保留字母和数字

感谢您的帮助!


你所说的“特殊字符”是什么意思?\w\W处理的是单词字符,这不仅仅包括A-Z(更不用说非英语字母)和数字。那么像O'Reily这样的单词怎么办?还有挪威语单词呢? - Panagiotis Kanavos
2个回答

7

[^0-9a-zA-Z ] 匹配Unicode字母和数字,但这会移除太多内容。

使用:

df = df.replace(r'[^\w\s]|_', '', regex=True)

请查看证明

说明

--------------------------------------------------------------------------------
  [^\w\s]                  any character except word characters (\p{L}, \p{N}, _) 
                           and whitespace (\p{Z})
--------------------------------------------------------------------------------
 |                        OR
--------------------------------------------------------------------------------
  _                        '_'

4

只需执行以下操作:

df = df.replace(r'[^0-9a-zA-Z ]', '', regex=True).replace("'", '')

1
谢谢您的回答,但那并没有起作用。例如,“M'gladbach” 应该变成 “Mgladbach”。 “ ' ” 是一个特殊字符吗? - cvluepke
@Panagiotis,我只想在我的字符串字段中保留A-Z、a-z、所有数字和空格。 - cvluepke
@U11 还是不起作用。只是为了确认:如果我的所有列并非字符串类型,这是否会成为一个问题?我应该只在特定的列上进行替换吗? - cvluepke
@U11 好的。如果我在特定列上执行此操作,需要在列名和替换之间添加 .str.,对吗? 我想要理解它,所以如果我说 r'[^0-9a-zA-Z ]',那意味着替换除括号内所有内容以外的所有内容? - cvluepke
@U11 如果我在特定的列上执行它,那么没有第二个replace()语句也可以工作。谢谢! - cvluepke
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接