我想用一个或条件来过滤我的数据帧,以保持特定列的值超出范围[-0.25,0.25]的行。我尝试了:

df = df[(df['col'] < -0.25) or (df['col'] > 0.25)]

但我得到了错误:

级数的真值不明确。使用a.empty、a.bool()、a.item()、.any()或.all()


当前回答

Pandas使用位&|。此外,每个条件都应该包装在()内。

这是有效的:

data_query = data[(data['year'] >= 2005) & (data['year'] <= 2010)]

但没有括号的相同查询不会:

data_query = data[(data['year'] >= 2005 & data['year'] <= 2010)]

其他回答

我在这个命令中遇到了一个错误:

if df != '':
    pass

但当我把它改成这样时,它起了作用:

if df is not '':
    pass

或者,也可以使用操作员模块。更多详细信息请参见Python文档:

import operator
import numpy as np
import pandas as pd

np.random.seed(0)
df = pd.DataFrame(np.random.randn(5,3), columns=list('ABC'))
df.loc[operator.or_(df.C > 0.25, df.C < -0.25)]

          A         B         C
0  1.764052  0.400157  0.978738
1  2.240893  1.867558 -0.977278
3  0.410599  0.144044  1.454274
4  0.761038  0.121675  0.4438

我遇到了同样的错误,并在PySpark数据帧中停滞了几天。由于我比较了两个字段中的整数值,所以通过用0填充na值,我成功地解决了这个问题。

您需要在panda中使用按位运算符|而不是或和&,而不是和。您不能简单地使用python中的bool语句。

对于非常复杂的过滤,请创建一个掩码并在数据帧上应用该掩码。将所有查询放入掩码并应用它,

mask = (df["col1"]>=df["col2"]) & (stock["col1"]<=df["col2"])
df_new = df[mask]

一件小事,浪费了我的时间。

将条件(如果使用“=”,“!=”进行比较)放在括号中。未能做到这一点也会引发这种例外。

这将起作用:

df[(some condition) conditional operator (some conditions)]

这不会:

df[some condition conditional-operator some condition]