pandas python replace string [duplicate]を使用する場合、特定の単語を除くすべての文字列を置き換えます

Dec 03 2020

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」が同じ行に残ります。

誰か助けてもらえますか?

ありがとうございました

回答

1 Thefourthbird Dec 03 2020 at 22:24

置き換える代わりに、選択肢の1つを一致させて、それを新しい列に抽出することができます。

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

@The 4番目の鳥からのアプローチを使用して、次のコードを使用してこれを解決しました。

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が必要でした