Ganti semua string kecuali kata tertentu saat menggunakan pandas python replace string [duplikat]

Dec 03 2020

Saya membentuk kolom baru dalam kerangka data panda dan saya ingin memasukkan nama pendek untuk sistem operasi. Saya menggunakan ekspresi reguler dan perlu mencocokkan kata-kata yang tepat untuk dikecualikan dari pilihan namun ketika saya mengubah ekspresi reguler untuk tidak memilih kata-kata itu kemudian menghentikan pencocokan tepat. Saya telah membaca sebanyak mungkin posting kata pencocokan tepat regex di sini dan tidak ada solusi yang berfungsi.

jadi misalnya saya punya data yang terlihat seperti ini:

Android 10kdsh
Chrome OS
Linux ddk2
OS X 10.
Windows 7
iOS c

dan saya ingin terlihat seperti ini:

Android 
Chrome
Linux
OS X
Windows
iOS

Saya mencoba kode sebagai berikut:

def short_OS(webchat):

    webchat["OS"] = webchat["Operating System"].str.replace(('[^(Android|^OS X|^Chrome|^Linux|^Windows|^iOS)]'),"", regex = True)

    return webchat

tetapi ini meninggalkan beberapa karakter sebagai pergi:

Androiddsh
ChromeOS
Linuxdd
OS X
Windows
iOS

jelas di atas hanyalah contoh tetapi prinsip tentang beberapa karakter yang tersisa seperti di kata adalah sama.

Saya harus mencatat bahwa membingkai kata dengan \ b tidak mengubah hasilnya. dan jika saya menggunakan $ untuk akhir string, dalam contoh 'Android' masih menyisakan '10kdsh' di baris yang sama

Apakah ada yang bisa membantu?

Terima kasih

Jawaban

1 Thefourthbird Dec 03 2020 at 22:24

Daripada mengganti, Anda dapat mencocokkan salah satu alternatif, mengekstraknya ke kolom baru.

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)

Keluaran

  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

Dengan menggunakan pendekatan dari @ Burung keempat, saya menyelesaikan ini menggunakan kode berikut:

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 / b yang mengelilingi kata diperlukan untuk menangkap kata-kata yang tepat