使用 pandas 过滤多个值

问题描述 投票:0回答:5

我正在使用Python和Pandas。我有一个

df
,其工作原理与此类似:

 +--------+--------+-------+
 |  Col1  |  Col2  | Col3 |
 +--------+--------+-------+
 | Team 1 | High   | Pizza |
 | Team 1 | Medium | Sauce |
 | Team 1 | Low    | Crust |
 +--------+--------+-------+

我想过滤

df
,以便我只看到
Col2
中的高或中。

这是我尝试过的,但没有运气

 df = df.loc[df['Col2'] == 'High' | (df['Col2'] == 'Medium')]

这是我遇到的错误

 cannot compare a dtyped [bool] array with a scalar of type [bool]

有什么想法可以让这个工作以及这个错误意味着什么吗?

python pandas filtering
5个回答
99
投票

这也有效,更Pythonic

country_list = ['brazil','poland','russia','countrydummy','usa']

filtered_df = df[df['Country Name'].isin(country_list)]
print(filtered_df )

29
投票

您缺少一对括号来获取

|
运算符两侧的可比较项 - 其优先级高于
==
(请参阅文档):

df = df.loc[(df['Col 2'] == 'High') | (df['Col2'] == 'Medium')]

3
投票

您还可以使用(对于 Pandas >= 0.13 ):

filtered_df = df.query( '"Country Name" == ["brazil","poland","russia","countrydummy","usa"]' )

print(filtered_df )

1
投票

我认为 df.query 是处理此类事情的最佳方法

df = df.query(["Col2 == ['高','中']")


0
投票

Pandas(Python)很有趣。当您想排除过滤器中的某些内容或将其过滤掉时,只需使用否定号“~”即可。

以 Roni 的回答为例:

country_list = ['brazil','poland','russia','countrydummy','usa']

# Use the tilde (~) for negation and isin() to filter out the specified countries
filtered_df = df[~df['Country Name'].isin(country_list)]

print(filtered_df)
© www.soinside.com 2019 - 2024. All rights reserved.