首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Pandas从给定字符串中删除子字符串

如何使用Pandas从给定字符串中删除子字符串
EN

Stack Overflow用户
提问于 2020-12-01 05:14:20
回答 2查看 47关注 0票数 0

最近我开始分析一个数据帧,我想删除所有不包含的子串

代码语言:javascript
复制
('Aparelho Celular','Internet (Serviços e Produtos)','Serviços Telefônicos Diversos','Telefonia Celular','Telefonia Comunitária ( PABX, DDR, Etc. )','Telefonia Fixa','TV por Assinatura','Televisão / Aparelho DVD / Filmadora','Telemarketing')

但是当我使用这个语法的时候-

代码语言:javascript
复制
df = df[~df["GrupoAssunto"].str.contains('Aparelho Celular','Internet (Serviços e Produtos)','Serviços Telefônicos Diversos','Telefonia Celular','Telefonia Comunitária ( PABX, DDR, Etc. )','Telefonia Fixa','TV por Assinatura','Televisão / Aparelho DVD / Filmadora','Telemarketing')]

我得到了这个错误:

代码语言:javascript
复制
TypeError: contains() takes from 2 to 6 positional arguments but 10 were given
EN

回答 2

Stack Overflow用户

发布于 2020-12-01 05:21:54

请改用.isin()函数。

例如:

代码语言:javascript
复制
vals1 = ['good val1', 'good val2', 'good val3', 'Aparelho Celular','Internet (Serviços e Produtos)','Serviços Telefônicos Diversos','Telefonia Celular','Telefonia Comunitária ( PABX, DDR, Etc. )','Telefonia Fixa','TV por Assinatura','Televisão / Aparelho DVD / Filmadora','Telemarketing']
vals2 = ['Aparelho Celular','Internet (Serviços e Produtos)','Serviços Telefônicos Diversos','Telefonia Celular','Telefonia Comunitária ( PABX, DDR, Etc. )','Telefonia Fixa','TV por Assinatura','Televisão / Aparelho DVD / Filmadora','Telemarketing']

df = pd.DataFrame({'col1': vals1})

使用取反的.isin()函数将在DataFrame上提供一个视图,其中不包括vals2列表中的值。

代码语言:javascript
复制
df[~df['col1'].isin(vals2)]

输出:

代码语言:javascript
复制
        col1
0  good val1
1  good val2
2  good val3
票数 0
EN

Stack Overflow用户

发布于 2020-12-01 05:28:57

只需在打开正则表达式的情况下通过|分隔不同的单词。这是使用contains搜索多个字符串的正确语法。re安全转换处理圆括号和任何其他特殊字符的转义。

代码语言:javascript
复制
bad_strings = ['Aparelho Celular','Internet (Serviços e Produtos)','Serviços Telefônicos Diversos','Telefonia Celular','Telefonia Comunitária ( PABX, DDR, Etc. )','Telefonia Fixa','TV por Assinatura','Televisão / Aparelho DVD / Filmadora','Telemarketing']
safe_bad_strings = [re.escape(s) for s in bad_strings]
df = df[~df["GrupoAssunto"].str.contains('|'.join(safe_bad_strings), regex=True]

因为这10个字符串都是作为参数传递给contains的,所以发生了错误。但是contains不需要超过一个模式,所以它抛出了一个错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65081257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档