Заменить всю строку, кроме определенных слов, при использовании pandas python replace string [дубликат]
Я формирую новый столбец в фрейме данных pandas и хочу ввести краткое имя для операционных систем. Я использую регулярное выражение и мне нужно точное совпадение слов, чтобы исключить из выбора, однако, когда я изменяю регулярное выражение, чтобы не выбирать слова, оно прекращает точное совпадение. Я прочитал здесь как можно больше сообщений с точным соответствием регулярных выражений, и ни одно из решений не работает.
так, например, у меня есть данные, которые выглядят так:
Android 10kdsh
Chrome OS
Linux ddk2
OS X 10.
Windows 7
iOS c
и я хочу, чтобы это выглядело так:
Android
Chrome
Linux
OS X
Windows
iOS
Я пробовал код следующим образом:
def short_OS(webchat):
webchat["OS"] = webchat["Operating System"].str.replace(('[^(Android|^OS X|^Chrome|^Linux|^Windows|^iOS)]'),"", regex = True)
return webchat
но это оставляет некоторые символы как уходящие:
Androiddsh
ChromeOS
Linuxdd
OS X
Windows
iOS
очевидно, что приведенное выше - всего лишь примеры, но принцип того, что некоторые символы остаются в словах, тот же.
Я должен отметить, что вставка слов в \ b не повлияла на результат. и если я использую $ для конца строки, в примере с «Android» он все равно оставляет «10kdsh» в той же строке
кто-нибудь может помочь, пожалуйста?
благодарю вас
Ответы
Вместо замены вы можете сопоставить одну из альтернатив, извлечь ее в новый столбец.
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)
Вывод
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
Используя подход @The 4th Bird, я решил эту проблему с помощью следующего кода:
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 вокруг слов был необходим для точного определения слов