在pandas列上应用条件以创建boolen索引数组

时间:2016-08-02 20:07:39

标签: python pandas

我想从pandas数据帧中删除特定行。通常你可以使用像

这样的东西来做到这一点
df[df['some_column'] != 1234]

df['some_column'] != 1234所做的是创建索引新df的索引数组,从而只允许值为True的行。

但在某些情况下,像我一样,我不知道如何以这种方式表达条件,迭代庞大行太慢,不能被认为是一个可行的选择。

更具体地说,我想删除列的值也是字典中的键的所有行,与上面的示例类似。

在一个完美的世界里,我会考虑像

这样的东西
df[df['some_column'] not in my_dict.keys()]

这显然不起作用。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

您正在寻找的是isin()

import pandas as pd

df = pd.DataFrame([[1, 2], [1, 3], [4, 6],[5,7],[8,9]], columns=['A', 'B'])
In[9]: df
Out[9]: df
   A  B
0  1  2
1  1  3
2  4  6
3  5  7
4  8  9
mydict = {1:'A',8:'B'}
df[df['A'].isin(mydict.keys())]
Out[11]: 
   A  B
0  1  2
1  1  3
4  8  9

答案 1 :(得分:1)

您可以将query用于此目的:

df.query('some_column != list(my_dict.keys()')

答案 2 :(得分:1)

您可以使用函数isin()来选择列值为可迭代的行。

使用列表:

my_list = ['my', 'own', 'data']
df.loc[df['column'].isin (my_list)]

使用dicts:

my_dict = {'key1':'Some value'}
df.loc[df['column'].isin (my_dict.keys())]