【问题标题】:replace a word present in dataframe替换数据框中存在的单词
【发布时间】:2021-10-14 14:28:30
【问题描述】:

我有一个单词 C++ 和 +。如果 + 没有附加任何其他单词,我只想删除它。所以基本上我想删除 + 而不是 C++。我想在整个数据帧上应用这个条件。

谁能告诉我怎么做。

我尝试过 df['Decrip']=df['Decrip'].str.replace('+',' ') 但这会删除每个带有 + 的单词。所以 C++ 变成了我不打算做的 C。

【问题讨论】:

  • 根据您的 DataFrame 中的其他数据,我建议使用正则表达式查看负面的lookbehinds 来帮助解决这个问题。如果您知道 + 可以出现的唯一两个位置是独立的或在 C++ 中,那么您可以使用DataFrame.where()
  • 向问题中添加小样本数据。
  • 嗨,我添加了数据集的一个小样本。我想删除最后一行的 + 。因此,如果 + 未附加到某个单词,则应将其删除。

标签: python regex pandas dataframe numpy


【解决方案1】:

您可以使用正则表达式(?<!\w|\+)\+,它具有否定的lookbehind断言来查找具有+但不匹配c+++的事件:

df['Decrip']=df['Decrip'].str.replace('(?<!\w|\+)\+',' ', regex=True)

Example at regex-101

也可以直接替换+

df['Decrip']=df['Decrip'].str.replace(' + ', ' ', regex=False)

【讨论】:

  • 非常感谢问题已解决。这也启发了我对我不知道的负面回溯断言。
  • 你能解释一下否定的lookbehind断言逻辑吗?
  • (?&lt;!\w|\+)\+ 表示它只会匹配+,前提是它前面没有\w|\+,其中\w 表示任何单词字符,\+ 表示+ 字符,它们由管道 | 连接,表示 OR。
【解决方案2】:

pd.DataFrame.str.replace 接受正则表达式。我无法准确回答您应该使用哪种正则表达式格式,因为我需要有关它的更多信息。但是您可以通过此链接了解如何使用 Regex。

https://regex101.com/

【讨论】:

    猜你喜欢
    • 2020-12-27
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 2018-07-27
    • 1970-01-01
    相关资源
    最近更新 更多