根据列值行删除行

问题描述

我想基于列的值删除dask DataFrame的某些行。

过去,我这样做没有问题:

ddf = ddf[ (ddf['col'] == str1) | (ddf['col'] == str2)]

我现在所拥有的有点不同。 此列包含“ abc,def,ghk”之类的字符串,如果它不包含“ abc”或“ doh”,我想删除它。

我尝试过类似的事情:

 ddf = ddf[ ('abc' in ddf['col']) | ('doh' in ddf['col'])]

但是我明白了

 KeyError: True

(我认为),因为该表达式返回布尔值,并且没有具有该值的键,

 ddf = ddf.drop(ddf.index[('abc' in ddf['col']) | ('doh' in ddf['col'])])

这给了我

 NotImplementedError: Series getitem in only supported for other series objects with matching partition structure

我在做什么错了?

解决方法

'abc' in ddf['col']将查看列中的字符串'abc'是否在任何地方,并返回一个值。如果要使用两个数组对DataFrame进行切片,请改用此方法:

 ddf = ddf[ (ddf['col'].str.isin('abc')) | (ddf['col'].str.isin('doh'))]