Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Pandas中的列表删除dataframe中的行_Python_Pandas - Fatal编程技术网

Python 使用Pandas中的列表删除dataframe中的行

Python 使用Pandas中的列表删除dataframe中的行,python,pandas,Python,Pandas,这是一个关于使用列表过滤数据帧的通用问题。问题如下: 我有一个数据帧df,带有一个列字段 我有一个禁用字段列表,例如ban_field=['field1'、'field2'、'field3'] banu字段的所有元素出现在df.field 目前,为了检索不带禁止字段的数据帧,我按照以下步骤进行操作: for f in ban_field: df = df[df.field!=f] 是否有一种更具python风格的方法(在一行中?)方法#1:使用isin和布尔数组选择器: In [4

这是一个关于使用列表过滤数据帧的通用问题。问题如下:

  • 我有一个数据帧
    df
    ,带有一个列
    字段
  • 我有一个禁用字段列表,例如
    ban_field=['field1'、'field2'、'field3']
  • banu字段的所有元素出现在
    df.field
目前,为了检索不带禁止字段的数据帧,我按照以下步骤进行操作:

for f in ban_field:
    df = df[df.field!=f]
是否有一种更具python风格的方法(在一行中?)

方法#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]
方法2:使用
查询

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]

您可以使用
isin
函数和否定(
~
)运算符删除它

df[~df.field.isin(ban_field)]