如果存在于熊猫列表中,则删除列中的模式

Posted

技术标签:

【中文标题】如果存在于熊猫列表中,则删除列中的模式【英文标题】:Remove pattern within a column if present in a list in pandas 【发布时间】:2022-01-21 12:21:39 【问题描述】:

我有一个数据框,例如:

COL1            COL2 
Element1_VAL1   A
Element2_VAL2   B
Something_lima3 C 
Something_logit5 D

并列出如:

the_list=['_VAL1','_VAL2','_lima3']

我想从COL1, 中删除the_list 中的所有匹配模式并得到:

COL1             COL2 
Element1         A
Element2         B
Something        C 
Something_logit5 D

这里是dict格式的数据框:

'COL1': 0: 'Element1_VAL1', 1: 'Element2_VAL2', 2: 'Something_lima3', 3: 'Something_logit5', 'COL2 ': 0: 'A', 1: 'B', 2: 'C', 3: 'D'

【问题讨论】:

为什么第 3 行有利马?它不应该只是一些东西 哎呀,抱歉打错了 【参考方案1】:

您可以使用 pandas replace(),这非常有用,因为它允许您传递要替换为单个元素(本例为空白)的元素列表,并避免多次调用 .str.replace()。试试:

df['COL1'] = df['COL1'].replace(the_list,'',regex=True)

【讨论】:

你好,我的不行,要移除的元素还在…… 我添加了 dict 格式的数据框,以便您测试您使用的脚本@Celius 感谢编辑我刚刚错过了regex=True 参数【参考方案2】:

尝试使用replace(),但稍作修改:

df['new'] = df['COL1'].str.replace('|'.join(the_list), '',regex=True)

print(df)

               COL1 COL2                new
0     Element1_VAL1     A          Element1
1     Element2_VAL2     B          Element2
2   Something_lima3     C         Something
3  Something_logit5     D  Something_logit5

这个'|'.join(the_list)join| 中的list 中的所有不同元素,str.replace 接受并读取为or。因此,如果发现任何这些子字符串,它将替换它们''

【讨论】:

不需要进行连接和强制正则表达式格式,replace() 接受列表的目的是您可以通过它而无需进行任何聚合 是的,你是对的。我刚刚测试了它。您的答案不起作用的原因是您没有包含regex = True。它现在正在工作。

以上是关于如果存在于熊猫列表中,则删除列中的模式的主要内容,如果未能解决你的问题,请参考以下文章

如果特定列中的值不是熊猫数据框中的整数,则删除行

从熊猫列中删除列表中的单词 - python 2.7

如果元素存在于数据框的另一列中,则删除列表元素

检查给定列表中的元素是不是存在于 DataFrame 的数组列中

如果两列中的值相同,则合并熊猫中的单元格

PySpark查找另一列中是否存在一列中的模式