删除包含列表中的值的行

8 浏览
0 Comments

删除包含列表中的值的行

我正在尝试过滤一个大的数据框,并且不想要那些在'Product Description'列中包含特定值的行。我查看了这个链接:

how can i remove multiple rows with different labels in one command in pandas?

Remove rows not .isin('X')

并且应用了代码。然而,

  df[-df['label'].isin(List)] 

对我来说不起作用,我也不确定该怎么办。

这是我的确切代码:

List2 = ['set up','setup','and install',....etc etc]

(我也尝试过用圆括号而不是方括号,但不起作用)

Computers_No_UNSPSC =Compters_No_UNSPSC[- Computers_No_UNSPSC['Product Description'].isin(List2)]

(我还尝试过使用~而不是-,但不起作用)

我是不是做错了什么/遗漏了什么。当我查看我的Computers_No_UNSPSC数据框时,我发现仍然有包含我创建的列表中的单词的行。它似乎没有过滤掉我不想要的内容。

谢谢帮助!

**我相信List2是有效的。我有一些人描述他们购买的计算机的数据行。我想要所有购买的计算机,而不是'computer repair'或'computer software'。

所以我创建了一个列表,似乎捕捉到了我不想要的外设/东西...当我说

print List2 

我得到

['set up', 'setup', 'and install', ' server', 'labor', 'services', 'processing', 'license', 'renewal', 'repair', 'case', 'speakers', 'cord', 'support', 'cart', 'docking station', 'components', 'accessories', 'software', ' membership', ' headsets ', ' keyboard', ' mouse', ' peripheral', ' part', ' charger', ' battery', ' drive', ' print', ' cable', ' supp', ' usb', ' shelf', 'disk', 'memory', 'studio', 'training', 'adapter', 'wiring', 'mirror']

这是否意味着它将每个字符串识别为一个单词?所以当我应用过滤器时,它将针对我List2中的每个单词进行过滤?

A =A[-A['Product Description'].isin(List2)] 

这似乎是不起作用的那一部分,但是我不确定我哪里出错了。

0
0 Comments

问题的原因是使用了错误的方法来检查label是否包含列表中的任何值。isin方法只会查找精确匹配,而不是部分匹配。解决方法是使用any方法来逐个检查列表中的单词是否出现在label中。虽然这种方法会比较慢,但是没有更简单的向量化方法可以在pandas中实现。可以尝试使用df[df.label.apply(lambda s: numpy.any([t in s for t in List2]))]这个方法来过滤包含指定单词的行。

0