【问题标题】:Replace all of string except specific words when using pandas python replace string使用pandas python替换字符串时替换除特定单词之外的所有字符串
【发布时间】:2021-03-15 15:06:28
【问题描述】:

我正在 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”留在同一行

有人可以帮忙吗?

谢谢

【问题讨论】:

  • 这不是很清楚:您希望将XOS X 保持一致,但您的“单词”列表既不包括OS X,也不包括X。你真正的要求是什么?另外,您是在从项目列表创建动态模式之后,还是可以像下面的answer 那样简单地对它们进行硬编码?
  • 抱歉给您带来了困惑。编辑代码以包含 OS X。我必须在所有试验和错误过程中放弃它。我试图以特定的描述符结束,因此操作系统列表更短,可以用于报告,而不是 Windows 7、Windows 8.1 等,它说的是 Windows。

标签: python regex pandas str-replace


【解决方案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

【讨论】:

  • 我以前没有听说过“提取”。这绝对似乎是要走的路,而不是排除除了我想要的单词之外的所有内容。但是,当我使用上面的代码运行它时,我仍然会在 OS col 中得到一些额外的字符。
  • @MizzH 还有哪些其他值可以提供额外字符?
【解决方案2】:

使用@The Fourth 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 用于捕获确切的单词

【讨论】:

    猜你喜欢
    • 2012-09-14
    • 2019-12-30
    • 1970-01-01
    • 2021-04-28
    • 2018-05-28
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多