gpt4 book ai didi

python - 将逻辑值与 pandas/numpy 中的 NaN 进行比较

转载 作者:太空狗 更新时间:2023-10-29 19:27:38 25 4
gpt4 key购买 nike

我想对两个 pandas bool 值系列进行逐元素或运算。 np.nan 也包括在内。

我尝试了三种方法并意识到表达式“np.nan or False”可以计算为True, Falsenp.nan 取决于方法。

这些是我的示例系列:

series_1 = pd.Series([True, False, np.nan])
series_2 = pd.Series([False, False, False])

方法#1

使用 pandas 的 | 运算符:

In [5]: series_1 | series_2
Out[5]:
0 True
1 False
2 False
dtype: bool

方法#2

使用 numpy 中的 logical_or 函数:

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

方法#3

我定义了 logical_or 的矢量化版本,它应该在数组上逐行计算:

@np.vectorize
def vectorized_or(a, b):
return np.logical_or(a, b)

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

In [8]:  pd.Series(vectorized_or(series_1, series_2))
Out[8]:
0 True
1 False
2 True
dtype: bool

问题

我想知道这些结果的原因。 This answer解释了 np.logical_or 并说 np.logical_or(np.nan, False)True 但是为什么这只在矢量化时有效而不是在方法#2 中?如何解释方法 1 的结果?

最佳答案

第一个区别:|np.bitwise_or。它解释了#1 和#2 之间的区别。

第二个区别:由于 serie_1.dtype if object(非同质数据),在前两种情况下,操作是逐行完成的。

使用矢量化时(#3):

The data type of the output of vectorized is determined by calling the function with the first element of the input. This can be avoided by specifying the otypes argument.

对于矢量化操作,您退出对象模式。数据首先根据第一个元素进行转换(此处为bool,bool(nan)True),然后进行操作。

关于python - 将逻辑值与 pandas/numpy 中的 NaN 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37131462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com