我有一套
remove_set
我想删除数据框中列值在该集合中的所有行。
df = df[df.column_in_set not in remove_set]
这给了我错误:
'Series' objects are mutable, thus they cannot be hashed.
解决这个问题的最大熊猫/ pythonic方法是什么?我可以遍历行并找出要排除的ilocs,但这看起来有点不合适。
一些样本输入和预期输出。
输入:
column_in_set value_2 value_3
1 'a' 3
2 'b' 4
3 'c' 5
4 'd' 6
remove = set([2,4])
输出:
column_in_set value_2 value_3
1 'a' 3
3 'c' 5
答案 0 :(得分:8)
要进行选择,您可以写:
df[~df['column_in_set'].isin(remove)]
isin()
只检查列/ Series的每个值是否在一个集合(或列表或其他可迭代)中,返回一个布尔系列。
在这种情况下,我们只希望在remove
中包含不的DataFrame行,因此我们用~
反转布尔值,然后用它来索引DataFrame。