使用Pandas中的列表删除数据框中的行

5
这是一个关于使用列表过滤pandas数据帧的通用问题。问题如下:
  • 我有一个带有列field的pandas数据帧df
  • 我有一个被禁止的字段列表,例如 ban_field=['field1','field2','field3']
  • 所有的ban_field元素都出现在df.field
目前,为了检索没有被禁止的字段的数据帧,我按照以下步骤进行:
for f in ban_field:
    df = df[df.field!=f]

有没有更符合Python风格的方法来进行(一行内)?

2个回答

9

方法 #1:使用 isin 和布尔数组选择器:

In [47]: df = pd.DataFrame({"a": [2]*10, "field": range(10)})

In [48]: ban_field = [3,4,6,7,8]

In [49]: df[~df.field.isin(ban_field)]
Out[49]: 
   a  field
0  2      0
1  2      1
2  2      2
5  2      5
9  2      9

[5 rows x 2 columns]

方法二:使用 query
In [51]: df.query("field not in @ban_field")
Out[51]: 
   a  field
0  2      0
1  2      1
2  2      2
5  2      5
9  2      9

[5 rows x 2 columns]

1
您可以使用isin函数和否定(~)运算符来删除它。
df[~df.field.isin(ban_field)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接