Ersetzen Sie alle Zeichenfolgen mit Ausnahme bestimmter Wörter, wenn Sie pandas python verwenden. Ersetzen Sie die Zeichenfolge [duplizieren].
Ich bilde eine neue Spalte in einem Pandas-Datenrahmen und möchte den Kurznamen für Betriebssysteme eingeben. Ich verwende Regex und muss exakte Übereinstimmungswörter verwenden, um sie von der Auswahl auszuschließen. Wenn ich jedoch den Regex so ändere, dass die Wörter nicht ausgewählt werden, wird die exakte Übereinstimmung gestoppt. Ich habe hier so viele reguläre Übereinstimmungs-Wortbeiträge wie möglich gelesen und keine der Lösungen funktioniert.
So habe ich zum Beispiel Daten, die so aussehen:
Android 10kdsh
Chrome OS
Linux ddk2
OS X 10.
Windows 7
iOS c
und ich möchte, dass es so aussieht:
Android
Chrome
Linux
OS X
Windows
iOS
Ich habe Code wie folgt ausprobiert:
def short_OS(webchat):
webchat["OS"] = webchat["Operating System"].str.replace(('[^(Android|^OS X|^Chrome|^Linux|^Windows|^iOS)]'),"", regex = True)
return webchat
aber dies lässt einige der Charaktere als verlassen:
Androiddsh
ChromeOS
Linuxdd
OS X
Windows
iOS
Offensichtlich sind die obigen Beispiele nur Beispiele, aber das Prinzip, dass einige der Zeichen so belassen werden, wie sie in den Wörtern enthalten sind, ist dasselbe.
Ich sollte beachten, dass das Einrahmen der Wörter mit \ b das Ergebnis nicht verändert hat. und wenn ich das $ für das Ende des Strings verwende, bleibt im Beispiel von 'Android' immer noch das '10kdsh' in derselben Zeile
kann mir bitte jemand helfen
Dankeschön
Antworten
Anstatt zu ersetzen, können Sie eine der Alternativen zu einer neuen Spalte extrahieren.
webchat = pd.DataFrame(data, columns=["Operating System"])
webchat["OS"] = webchat["Operating System"].str.extract((r"^(Android|Chrome|Linux|OS X|Windows|iOS)\b"))
print(webchat)
Ausgabe
Operating System OS
0 Android 10kdsh Android
1 Chrome OS Chrome
2 Linux ddk2 Linux
3 OS X 10. OS X
4 Windows 7 Windows
5 iOS c iOS
Mit dem Ansatz von @Der vierte Vogel habe ich dies mit dem folgenden Code gelöst:
def short_OS(webchat):
webchat["OS"] = webchat["Operating System"].str.extract(r"(\bAndroid\b|\bOS X\b|\bChrome\b|\bLinux\b|\bWindows\b|\biOS\b)")
return webchat
Das / b, das die Wörter umgibt, wurde benötigt, um die genauen Wörter zu erfassen