Pandas 从字符串列中删除非字母数字字符
Pandas remove non-alphanumeric characters from string column
使用 pandas 和 jupyter notebook 我想删除所有非字符的内容,即:连字符、特殊字符等
是:
firstname,birthday_date
joe-down§,02-12-1990
lucash brown_ :),06-09-1980
^antony,11-02-1987
mary|,14-12-2002
更改为:
firstname,birthday_date
joe down,02-12-1990
lucash brown,06-09-1980
antony,11-02-1987
mary,14-12-2002
我正在尝试:
df['firstname'] = df['firstname'].str.replace(r'!', '')
df['firstname'] = df['firstname'].str.replace(r'^', '')
df['firstname'] = df['firstname'].str.replace(r'|', '')
df['firstname'] = df['firstname'].str.replace(r'§', '')
df['firstname'] = df['firstname'].str.replace(r':', '')
df['firstname'] = df['firstname'].str.replace(r')', '')
......
......
df
它似乎有效,但在填充较多的列中,我总是会漏掉一些字符。
有没有办法完全消除所有非文本字符并在同一列中只保留一个或多个单词?在示例中,我使用了名字来使这个想法更好!但它也适用于包含整个单词的列!
谢谢!
P.S 还为表情符号编码文本
试试下面的方法。它适用于您在 post
中使用的名称
first_names = ['joe-down§','lucash brown_','^antony','mary|']
clean_names = []
keep = {'-',' '}
for name in first_names:
clean_names.append(''.join(c if c not in keep else ' ' for c in name if c.isalnum() or c in keep))
print(clean_names)
输出
['joe down', 'lucash brown', 'antony', 'mary']
您可以为此使用正则表达式。
df['firstname'] = df['firstname'].str.replace('[^a-zA-Z0-9]', ' ', regex=True).str.strip()
df.firstname.tolist()
>>> ['joe down', 'lucash brown', 'antony', 'mary']
使用 pandas 和 jupyter notebook 我想删除所有非字符的内容,即:连字符、特殊字符等
是:
firstname,birthday_date
joe-down§,02-12-1990
lucash brown_ :),06-09-1980
^antony,11-02-1987
mary|,14-12-2002
更改为:
firstname,birthday_date
joe down,02-12-1990
lucash brown,06-09-1980
antony,11-02-1987
mary,14-12-2002
我正在尝试:
df['firstname'] = df['firstname'].str.replace(r'!', '')
df['firstname'] = df['firstname'].str.replace(r'^', '')
df['firstname'] = df['firstname'].str.replace(r'|', '')
df['firstname'] = df['firstname'].str.replace(r'§', '')
df['firstname'] = df['firstname'].str.replace(r':', '')
df['firstname'] = df['firstname'].str.replace(r')', '')
......
......
df
它似乎有效,但在填充较多的列中,我总是会漏掉一些字符。 有没有办法完全消除所有非文本字符并在同一列中只保留一个或多个单词?在示例中,我使用了名字来使这个想法更好!但它也适用于包含整个单词的列!
谢谢!
P.S 还为表情符号编码文本
试试下面的方法。它适用于您在 post
中使用的名称first_names = ['joe-down§','lucash brown_','^antony','mary|']
clean_names = []
keep = {'-',' '}
for name in first_names:
clean_names.append(''.join(c if c not in keep else ' ' for c in name if c.isalnum() or c in keep))
print(clean_names)
输出
['joe down', 'lucash brown', 'antony', 'mary']
您可以为此使用正则表达式。
df['firstname'] = df['firstname'].str.replace('[^a-zA-Z0-9]', ' ', regex=True).str.strip()
df.firstname.tolist()
>>> ['joe down', 'lucash brown', 'antony', 'mary']