使用“替换字符串”时,替换除特定单词以外的所有字符串

2024-06-16 11:06:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在熊猫数据框中形成一个新列,我想输入操作系统的简称。 我正在使用正则表达式,需要精确匹配单词以从选择中排除,但是当我将正则表达式更改为不选择单词时,它会停止精确匹配。我在这里读了尽可能多的正则表达式精确匹配单词的文章,但没有一个解决方案是有效的

例如,我有如下数据:

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”保留在同一行中

有人能帮忙吗

多谢各位


Tags: 数据代码oslinuxwindowsdef文章chrome
2条回答

使用@TheFirst 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以捕获准确的单词

您可以将其中一个选项与新列进行匹配,而不是替换

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

相关问题 更多 >