web-dev-qa-db-fra.com

Comment supprimer des caractères non alphanumériques des chaînes d'une colonne de données en Python?

J'ai une colonne DF qui contient de nombreuses chaînes. Je dois supprimer tous les caractères non alphanumériques de cette colonne: i.e:

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

Code d'exécution:

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

J'ai essayé:

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

Mais cela n’a pas fonctionné et j’estime qu’il devrait exister un moyen plus efficace de le faire avec regex. Toute aide serait très appréciée.

5
TheSaint321

Utilisez 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

Pour conserver les caractères alphanumériques (et pas seulement les alphabets comme le suggère le résultat attendu), vous avez besoin des éléments suivants:

df.strings.str.replace('\W', '')
0    abc1
1     abc
Name: strings, dtype: object 
7
coldspeed

Comme vous avez écrit en alphanumérique, vous devez ajouter 0 à 9 dans la regex. Mais vous vouliez peut-être seulement alphabétique ...

import pandas as pd

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

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

Mais c’est fondamentalement ce que COLDSPEED a écrit

3
StefanK

Vous pouvez aussi utiliser regex

import re

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

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

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

['abc', 'abc']
1
lapinkoira