web-dev-qa-db-de.com

Entfernen von nicht alphanumerischen Zeichen aus Zeichenfolgen in einer Datenrahmenspalte in Python

Ich habe eine DF-Spalte, die viele Zeichenfolgen enthält. Ich muss alle nicht-alphanumerischen Zeichen aus dieser Spalte entfernen: d. H.

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

Code ausführen:

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

Ich habe es versucht:

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

Aber das hat nicht funktioniert und ich bin der Meinung, dass es einen effizienteren Weg geben sollte, dies mit Regex zu tun. Jede Hilfe wäre sehr dankbar.

5
TheSaint321

Verwenden Sie 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

Um alphanumerische -Zeichen beizubehalten (nicht nur Alphabete, wie von Ihrer erwarteten Ausgabe erwartet), benötigen Sie:

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

Da Sie alphanumerisch geschrieben haben, müssen Sie 0-9 in den Regex einfügen. Aber vielleicht wollten Sie nur alphabetisch ...

import pandas as pd

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

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

Aber es ist im Grunde das, was COLDSPEED geschrieben hat

3
StefanK

Sie können auch Regex verwenden

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