如果存在于熊猫列表中,则删除列中的模式
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
。它现在正在工作。以上是关于如果存在于熊猫列表中,则删除列中的模式的主要内容,如果未能解决你的问题,请参考以下文章