Zastąp cały ciąg z wyjątkiem określonych słów podczas używania pandy python zamień ciąg [duplikat]
Tworzę nową kolumnę w ramce danych pandy i chcę wprowadzić skróconą nazwę dla systemów operacyjnych. Używam wyrażenia regularnego i potrzebuję ścisłego dopasowania słów, aby wykluczyć je z zaznaczenia, jednak gdy zmieniam wyrażenie regularne, aby nie wybierać słów, wówczas następuje zatrzymanie dopasowania ścisłego. Przeczytałem tutaj tyle postów ze słowami regex w dopasowaniu ścisłym i żadne z rozwiązań nie działa.
więc na przykład mam dane, które wyglądają tak:
Android 10kdsh
Chrome OS
Linux ddk2
OS X 10.
Windows 7
iOS c
i chcę, żeby wyglądało to tak:
Android
Chrome
Linux
OS X
Windows
iOS
Próbowałem kodu w następujący sposób:
def short_OS(webchat):
webchat["OS"] = webchat["Operating System"].str.replace(('[^(Android|^OS X|^Chrome|^Linux|^Windows|^iOS)]'),"", regex = True)
return webchat
ale to pozostawia niektóre postacie jako odchodzące:
Androiddsh
ChromeOS
Linuxdd
OS X
Windows
iOS
oczywiście powyższe są tylko przykładami, ale zasada dotycząca niektórych znaków pozostawionych tak, jak są w słowach, jest taka sama.
Powinienem zauważyć, że obramowanie słów za pomocą \ b nie zmieniło wyniku. a jeśli użyję $ na końcu ciągu, w przykładzie „Android” nadal pozostawia „10kdsh” w tej samej linii
czy ktoś może pomóc, proszę?
Dziękuję Ci
Odpowiedzi
Zamiast zastępować, możesz dopasować jedną z alternatyw, wyodrębnić ją do nowej kolumny.
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)
Wynik
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
Korzystając z podejścia z @The 4th bird rozwiązałem to za pomocą następującego kodu:
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
/ b otaczające słowa było potrzebne, aby uchwycić dokładne słowa