【问题标题】:Pandas: Find pattern after specific text and replace the patternPandas:在特定文本之后查找模式并替换模式
【发布时间】:2021-07-28 16:29:01
【问题描述】:

我在下面有一个示例数据框。

df = pd.DataFrame({'col1' : ['The IO operation at logical block address 0x0 for Disk1 (PDO name: \\Device00024','fddasfsa'],'col2': [1,2])

我喜欢将 'Device' 和 ')' 之间的字符替换为 'xxxxxx'。是否可以在 pandas 中进行这种替换?

我认为我可以做到以下几点。代码运行没有问题,但替换永远不会发生。

df['col1'] = df['col1'].replace(r'\\Device(.*)', 'xxxxxx,regex=True)

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你可以在这里使用str.replace

    df["col1"] = df["col1"].str.replace(r'\bDevice\d+', 'Devicexxxxxx')
    

    您在上面提供的代码示例甚至无法编译,但它实际上看起来是正确的。你犯了我最初在这里犯的同样的错误。您需要在替换中包含Device,而不仅仅是xxxxxx,因为您的正则表达式匹配将使用设备字符串以及数字。

    【讨论】:

    • 不知何故这不起作用。我已经更新了全文,以防文本与代码冲突。
    • @user3782604 我的逻辑是working in this demo。我可以推测,您的实际数据可能与您的想法不同。
    【解决方案2】:

    只需替换设备左侧的数字即可。代码如下

    df['col1'].str.replace('(?<!Device)\d+','xxxxx')

    【讨论】:

    • 这也将 0x0 替换为 xxxxxxxxx。
    【解决方案3】:

    另一种解决方案,如果您希望x 的数量与数字相同:

    df["col1"] = df["col1"].str.replace(
        r"(?<=Device)(\d+)", lambda g: "x" * len(g.group(1)), regex=True
    )
    print(df)
    

    打印:

                            col1  col2
    0  adbsdfklj (\Devicexxxxxx)     1
    1                   fddasfsa     2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      • 1970-01-01
      • 1970-01-01
      • 2013-10-23
      • 2019-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多