【问题标题】:compare two columns and keep difference between strings比较两列并保持字符串之间的差异
【发布时间】:2021-02-04 18:34:07
【问题描述】:

在将 pandas 从 0.25.1 升级到 1.1.3 之前,我能够从中删除数据框中的字符串:

+---+------------------+------------------+
|   |   strip_me       |     pattern      |
+---+------------------+------------------+
| 0 |   string part 0  |     string       |
+---+------------------+------------------+
| 1 |   string part 1  |     part         |
+---+------------------+------------------+

进入这个:

+---+------------------+------------------+
|   |   strip_me       |     pattern      |
+---+------------------+------------------+
| 0 |   part 0         |     string       |
+---+------------------+------------------+
| 1 |   string 1       |     part         |
+---+------------------+------------------+

使用这样的操作:

df['strip_me'] = df['strip_me'].replace(''+df.pattern,'',regex=True)

但是自从更新后,我的 jupyter notebook 返回了这个错误:

ValueError: Series.replace cannot use dict-like to_replace and non-None value

我错过了什么?通过 stackoverflow 和 ggl 进行彻底搜索尚未提供答案。我什至尝试过 RTF-pandas-M。你会采取什么方法来理解和解决 ValueError? 我在 Anaconda 中有两个环境用于调试,一个使用旧的 pandas,一个使用升级的 pandas。由于堆栈内的依赖关系,降级不是一种选择。

如果能帮助我找到解决方案,我将不胜感激。

【问题讨论】:

    标签: python regex pandas dictionary replace


    【解决方案1】:

    我相信系列参数被视为索引为键的字典。字典选项现在仅可用于 DataFrame。对于 Series,dict to_replace 表示其他含义(k:v 表示将值 k 替换为值 v)。

    快速修复:将您的 df['strip_me'] 转换为数据框:

    df['strip_me'] = (df[['strip_me']].T.replace(''+df.pattern,'',regex=True)
                         .loc['strip_me']
                     )
    

    【讨论】:

    • 我知道 OP 在他们的示例代码中有这个,但是 .replace(''+df.pattern, ...) 所做的事情与仅仅拥有 .replace(df.pattern, ...) 不同
    • 你的快速修复就像一个魅力,@quang-hoang!谢谢你的解释。我将深入了解您的答案以便更好地理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多