相关疑难解决方法(0)

Pandas中布尔索引的逻辑运算符

我在Pandas中使用布尔索引.问题是为什么声明:

a[(a['some_column']==some_number) & (a['some_other_column']==some_other_number)]
Run Code Online (Sandbox Code Playgroud)

工作正常,而

a[(a['some_column']==some_number) and (a['some_other_column']==some_other_number)]
Run Code Online (Sandbox Code Playgroud)

存在错误?

例:

a=pd.DataFrame({'x':[1,1],'y':[10,20]})

In: a[(a['x']==1)&(a['y']==10)]
Out:    x   y
     0  1  10

In: a[(a['x']==1) and (a['y']==10)]
Out: ValueError: The truth value of an array with more than one element is ambiguous.     Use a.any() or a.all()
Run Code Online (Sandbox Code Playgroud)

python filtering boolean dataframe pandas

119
推荐指数
3
解决办法
14万
查看次数

在pandas/numpy中将逻辑值与NaN进行比较

我想对两个pandas系列的布尔值进行逐元素的OR运算.np.nans也包括在内.

我已经尝试了三种方法,并意识到,表达" np.nanFalse"可evaluted到True,False以及np.nan取决于方法.

这些是我的例子系列:

series_1 = pd.Series([True, False, np.nan])
series_2 = pd.Series([False, False, False])
Run Code Online (Sandbox Code Playgroud)

方法#1

使用|熊猫的运营商:

In [5]: series_1 | series_2
Out[5]: 
0     True
1    False
2    False
dtype: bool
Run Code Online (Sandbox Code Playgroud)

方法#2

使用logical_ornumpy中的函数:

In [6]: np.logical_or(series_1, series_2)
Out[6]: 
0     True
1    False
2      NaN
dtype: object
Run Code Online (Sandbox Code Playgroud)

方法#3

我定义了一个矢量化版本,logical_or它应该在数组上逐行进行评估:

@np.vectorize
def vectorized_or(a, b):
   return np.logical_or(a, b)
Run Code Online (Sandbox Code Playgroud)

vectorized_or在两个系列上使用并将其输出(这是一个numpy数组)转换为pandas系列:

In [8]:  pd.Series(vectorized_or(series_1, series_2))
Out[8]: 
0 …
Run Code Online (Sandbox Code Playgroud)

python numpy pandas

12
推荐指数
1
解决办法
696
查看次数

标签 统计

pandas ×2

python ×2

boolean ×1

dataframe ×1

filtering ×1

numpy ×1