最近我开始分析一个数据帧,我想删除所有不包含的子串
('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 = 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')]我得到了这个错误:
TypeError: contains() takes from 2 to 6 positional arguments but 10 were given发布于 2020-12-01 05:21:54
请改用.isin()函数。
例如:
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列表中的值。
df[~df['col1'].isin(vals2)]输出:
col1
0 good val1
1 good val2
2 good val3发布于 2020-12-01 05:28:57
只需在打开正则表达式的情况下通过|分隔不同的单词。这是使用contains搜索多个字符串的正确语法。re安全转换处理圆括号和任何其他特殊字符的转义。
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不需要超过一个模式,所以它抛出了一个错误。
https://stackoverflow.com/questions/65081257
复制相似问题