我想从pandas数据帧中删除特定行。通常你可以使用像
这样的东西来做到这一点df[df['some_column'] != 1234]
df['some_column'] != 1234
所做的是创建索引新df的索引数组,从而只允许值为True
的行。
但在某些情况下,像我一样,我不知道如何以这种方式表达条件,迭代庞大行太慢,不能被认为是一个可行的选择。
更具体地说,我想删除列的值也是字典中的键的所有行,与上面的示例类似。
在一个完美的世界里,我会考虑像
这样的东西df[df['some_column'] not in my_dict.keys()]
这显然不起作用。有什么建议吗?
答案 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)]
my_dict = {'key1':'Some value'}
df.loc[df['column'].isin (my_dict.keys())]