Ersetzen Sie alle Zeichenfolgen mit Ausnahme bestimmter Wörter, wenn Sie pandas python verwenden. Ersetzen Sie die Zeichenfolge [duplizieren].

Dec 03 2020

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

1 Thefourthbird Dec 03 2020 at 22:24

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
MizzH Dec 04 2020 at 05:15

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