我正在使用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]
有什么想法可以让这个工作以及这个错误意味着什么吗?
这也有效,更Pythonic
country_list = ['brazil','poland','russia','countrydummy','usa']
filtered_df = df[df['Country Name'].isin(country_list)]
print(filtered_df )
您缺少一对括号来获取
|
运算符两侧的可比较项 - 其优先级高于 ==
(请参阅文档):
df = df.loc[(df['Col 2'] == 'High') | (df['Col2'] == 'Medium')]
您还可以使用(对于 Pandas >= 0.13 ):
filtered_df = df.query( '"Country Name" == ["brazil","poland","russia","countrydummy","usa"]' )
print(filtered_df )
我认为 df.query 是处理此类事情的最佳方法
df = df.query(["Col2 == ['高','中']")
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)