Vorwort
Datenbereinigung ist eine komplexe und mühsame (kubi) Aufgabe und zugleich das wichtigste Glied im gesamten Datenanalyseprozess. Manche Leute sagen, dass 80 % der Zeit eines Analyseprojekts darin besteht, Daten zu bereinigen. Das klingt seltsam, trifft aber auf die tatsächliche Arbeit zu. Es gibt zwei Zwecke der Datenbereinigung. Der erste besteht darin, die Daten durch die Bereinigung verfügbar zu machen. Die zweite besteht darin, die Daten für die spätere Analyse besser geeignet zu machen. Mit anderen Worten: Es gibt „schmutzige“ Daten, die gelöscht werden müssen, und saubere Daten, die ebenfalls gelöscht werden müssen.
Bei der Datenanalyse, insbesondere bei der Textanalyse, erfordert die Zeichenverarbeitung viel Energie, daher ist das Verständnis der Zeichenverarbeitung auch eine sehr wichtige Fähigkeit für die Datenanalyse.
String-Verarbeitungsmethoden
Lassen Sie uns zunächst die grundlegenden Methoden verstehen.
Zuerst Alle, lasst es uns verstehen. Die folgende Zeichenfolgenaufteilungsmethode
str='i like apple,i like bananer' print(str.split(','))
Das Ergebnis der Aufteilung der Zeichenkette durch Kommas:
[ 'Ich mag Apfel', 'Ich mag Bananen']
print(str.split(' '))
Das Ergebnis der Aufteilung nach Leerzeichen:
[ 'i', 'like', 'apple,i', 'like', 'bananer']
print(str.index(',')) print(str.find(','))
Beide Suchergebnisse sind:
12
Wenn der Index nicht gefunden werden kann, gibt der Index einen Fehler zurück und die Suche gibt -1 zurück
print(str.count('i'))
Das Ergebnis ist:
4
connt wird verwendet, um die Häufigkeit der Zielzeichenfolge zu zählen
print(str.replace(',', ' ').split(' '))
Das Ergebnis ist:
['i', 'like', 'apple', 'i', 'like', 'bananer']
Hier ersetzt ersetzen Kommas durch Leerzeichen und verwendet dann Leerzeichen, um die Zeichenfolge aufzuteilen, gerade genug, um jedes Wort zu extrahieren.
Neben herkömmlichen Methoden sind reguläre Ausdrücke das leistungsstärkste Werkzeug zur Zeichenverarbeitung.
Reguläre Ausdrücke
Bevor wir reguläre Ausdrücke verwenden, müssen wir die vielen Methoden in regulären Ausdrücken verstehen.
Lassen Sie mich zunächst die Verwendung der nächsten Methode betrachten. Verstehen Sie zunächst den Unterschied zwischen den Übereinstimmungs- und Suchmethoden
str = "Cats are smarter than dogs" pattern=re.compile(r'(.*) are (.*?) .*') result=re.match(pattern,str) for i in range(len(result.groups())+1): print(result.group(i))
Das Ergebnis ist:
Katzen sind schlauer als Hunde
Katzen
schlauer
Nach dieser Form der Pettern-Matching-Regel , match und Das Rückgabeergebnis der Suchmethode ist das gleiche
Zu diesem Zeitpunkt wird das Muster in
pattern=re.compile(r'are (.*?) .*')
Übereinstimmung, dann wird keine zurückgegeben. Das Suchergebnis lautet:
sind schlauer als Hunde
schlauer
Als nächstes lernen wir die Verwendung von „andere“ kennen Methoden
str = "138-9592-5592 # number" pattern=re.compile(r'#.*$') number=re.sub(pattern,'',str) print(number)
Das Ergebnis ist:
138-9592-5592
Das Oben wird der Inhalt nach dem #-Zeichen durch leer ersetzt, um den Zweck des Extrahierens der Zahl zu erreichen.
Wir können den Querbalken der Zahl weiter ersetzen
print(re.sub(r'-*','',number))
Das Ergebnis ist:
13895925592
Wir können auch die Suchmethode verwenden, um die gefundene Zeichenfolge auszudrucken
str = "138-9592-5592 # number" pattern=re.compile(r'5') print(pattern.findall(str))
Das Ergebnis ist:
['5', '5', '5']
Der Gesamtinhalt des regulären Ausdrucks ist relativ groß, und wir müssen über genügend Regeln zum Abgleichen von Zeichenfolgen verfügen Im Folgenden sind die spezifischen Matching-Regeln aufgeführt.
Vektorisierte String-Funktion
Beim Bereinigen der verstreuten Daten, die analysiert werden sollen, ist es oft notwendig, einige String-Regularisierungsarbeiten durchzuführen .
data = pd.Series({'li': '120@qq.com','wang':'5632@qq.com', 'chen': '8622@xinlang.com','zhao':np.nan,'sun':'5243@gmail.com'}) print(data)
Das Ergebnis ist:
Die Daten können durch einige Methoden vorverarbeitet werden Regulierung und Integration Verwenden Sie beispielsweise „contains“, um zu bestimmen, ob alle Daten das Schlüsselwort
print(data.str.contains('@'))
enthalten. Das Ergebnis ist:
Sie können die Zeichenfolge auch teilen und die erforderliche Zeichenfolge extrahieren
data = pd.Series({'li': '120@qq.com','wang':'5632@qq.com', 'chen': '8622@xinlang.com','zhao':np.nan,'sun':'5243@gmail.com'}) pattern=re.compile(r'(\d*)@([a-z]+)\.([a-z]{2,4})') result=data.str.match(pattern) #这里用fillall的方法也可以result=data.str.findall(pattern) print(result)
结果为:
chen [(8622, xinlang, com)]
li [(120, qq, com)]
sun [(5243, gmail, com)]
wang [(5632, qq, com)]
zhao NaN
dtype: object
此时加入我们需要提取邮箱前面的名称
print(result.str.get(0))
结果为:
或者需要邮箱所属的域名
print(result.str.get(1))
结果为:
当然也可以用切片的方式进行提取,不过提取的数据准确性不高
data = pd.Series({'li': '120@qq.com','wang':'5632@qq.com', 'chen': '8622@xinlang.com','zhao':np.nan,'sun':'5243@gmail.com'}) print(data.str[:6])
结果为:
最后我们了解下矢量化的字符串方法
更多Detaillierte Erläuterung der Zeichenfolgenverarbeitung in der Python-Datenbereinigungsreihe相关文章请关注PHP中文网!