这是一个关于使用列表过滤pandas数据帧的一般性问题.问题如下:
df带有列的pandas数据框fieldban_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方式继续进行(在一行?)?
方法#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)
| 归档时间: |
|
| 查看次数: |
2402 次 |
| 最近记录: |