相关疑难解决方法(0)

为什么在Python/Numpy中作为布尔值转换时,"Not a Number"值等于True?

当将NumPy Not-a-Number值转换为布尔值时,它变为True,例如如下.

>>> import numpy as np
>>> bool(np.nan)
True
Run Code Online (Sandbox Code Playgroud)

这与我直觉所期望的完全相反.这种行为是否存在合理的原则?

(我怀疑在Octave中可能会出现相同的行为.)

python math numpy

29
推荐指数
2
解决办法
5529
查看次数

在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 列选择:在 str 和 NaN 上选择时非交换按位 OR

介绍:

给定一个数据框,我认为以下是正确的:

df[(condition_1) | (condition_2)] <=> df[(condition_2) | (condition_1)]
Run Code Online (Sandbox Code Playgroud)

df[(df.col1==1) | (df.col1==2)] <=> df[(df.col1==2) | (df.col1==1)]
Run Code Online (Sandbox Code Playgroud)

问题:

但事实证明它在以下情况下失败,其中涉及NaN这可能是失败的原因:

df = pd.DataFrame([[np.nan, "abc", 2], ["abc", 2, 3], [np.nan, 5,6], [8,9,10]], columns=["A", "B", "C"])
df
     A    B   C
0  NaN  abc   2
1  abc    2   3
2  NaN    5   6
3    8    9  10
Run Code Online (Sandbox Code Playgroud)

以下按预期工作:

df[(df.A.isnull()) | (df.A.str.startswith("a"))]
     A    B  C
0  NaN  abc  2
1  abc    2  3
2  NaN    5  6
Run Code Online (Sandbox Code Playgroud)

但是,如果我对元素进行通勤,则会得到不同的结果:

df[(df.A.str.startswith("a")) | (df.A.isnull())]
     A  B …
Run Code Online (Sandbox Code Playgroud)

python pandas

5
推荐指数
1
解决办法
157
查看次数

标签 统计

python ×3

numpy ×2

pandas ×2

math ×1