根据列中的字符串过滤数据框

时间:2019-08-21 22:23:52

标签: regex python-3.x pandas

为了简单起见,由于我的数据集非常大,所以我有一个数据框:

df = pd.DataFrame([['Foo', 'Foo1'], ['Bar', 'Bar2'], ['FooBar', 'FooBar3']],
columns= ['Col_A', 'Col_B'])

我需要以某种方式过滤此数据帧,当指定的列行包含部分的,不区分大小写的字符串(foo)时,将消除整个行。在这种情况下,我尝试了一下却无济于事... PS,我的正则表达式技能太垃圾了,如果因为这个原因而无法正常工作,请原谅我。

df = df[df['Col_A'] != '^[Ff][Oo][Oo].*']

由于数据集的大小,效率是一个问题,这就是为什么我没有选择迭代路线的原因。预先感谢。

2 个答案:

答案 0 :(得分:2)

另一种方法也是将str.startswithstr.lowerNOT运算符~一起使用:

df[~df['Col_A'].str.lower().str.startswith('foo')]

输出

  Col_A Col_B
1   Bar  Bar2

答案 1 :(得分:1)

使用str.match

df[~df['Col_A'].str.match('^[Ff][Oo][Oo].*')]

结果

    Col_A   Col_B
1   Bar     Bar2