我想用一个或条件来过滤我的数据帧,以保持特定列的值超出范围[-0.25,0.25]的行。我尝试了:
df = df[(df['col'] < -0.25) or (df['col'] > 0.25)]
但我得到了错误:
级数的真值不明确。使用a.empty、a.bool()、a.item()、.any()或.all()
我想用一个或条件来过滤我的数据帧,以保持特定列的值超出范围[-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]