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

Posted

技术标签:

【中文标题】如何从 Python 的数据框列中的字符串中删除非字母数字字符?【英文标题】:How to remove non-alpha-numeric characters from strings within a dataframe column in Python? 【发布时间】:2018-02-24 17:42:00 【问题描述】:

我有一个 DF 列,其中包含许多字符串。我需要从该列中删除所有非字母数字字符:即:

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

运行代码:

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

我试过了:

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

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

【问题讨论】:

【参考方案1】:

使用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 

【讨论】:

【参考方案2】:

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

import pandas as pd

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

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

但这基本上是COLDSPEED写的

【讨论】:

这是正确的,我必须添加 0-9 和空格,因为我想要这个,但是coldspeed 的答案是第一个并且是正确的方法。【参考方案3】:

你也可以使用正则表达式

import re

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

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

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

['abc', 'abc']

【讨论】:

以上是关于如何从 Python 的数据框列中的字符串中删除非字母数字字符?的主要内容,如果未能解决你的问题,请参考以下文章

我想从python中数据框列中的字符串链接中删除子字符串

从数据框列中的字符串值中删除字符

如何使用模块 re 从数据框列中删除特殊字符? [复制]

删除数据框列中的非字母str

从字符串 PySpark 数据框列中删除正则表达式

如何删除数据框列中的空格并向其添加字符串“NA”?