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

Col*_*vel 5 python pandas

这是一个关于使用列表过滤pandas数据帧的一般性问题.问题如下:

  • 我有一个df带有列的pandas数据框field
  • 例如,我有一个禁止字段列表 ban_field=['field1','field2','field3']
  • 所有元素都ban_field出现在df.field

目前,要检索没有禁止字段的数据帧,我按以下步骤操作:

for f in ban_field:
    df = df[df.field!=f]
Run Code Online (Sandbox Code Playgroud)

是否有更多的pythonic方式继续进行(在一行?)?

DSM*_*DSM 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]
Run Code Online (Sandbox Code Playgroud)

方法#2:使用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]
Run Code Online (Sandbox Code Playgroud)