【问题标题】:Python: What's the proper way to convert between python bool and numpy bool_?Python:在 python bool 和 numpy bool_ 之间转换的正确方法是什么?
【发布时间】:2018-04-24 16:51:44
【问题描述】:

当我想到我可能有“错误”的布尔值时,我不断收到带有布尔值的 numpy ndarray 错误,而熊猫结构不接受作为掩码。 编辑:它不是原始的 numpy 数组,而是 pandas.Index。

虽然我能够找到解决方案,但唯一有效的解决方案非常难看:

mymask = mymask.astype(np.bool_) #ver.1 does not work, elements remain <class 'bool'>
mymask = mymask==True #ver.2, does work, elements become <class 'numpy.bool_'>
mypdstructure[mymask] 

对值进行类型转换的正确方法是什么?

【问题讨论】:

  • 什么样的错误? numpy 和 pandas 一起玩得很好。你确定这不仅仅是标签的问题吗?
  • “IndexError:用作索引的数组必须是整数(或布尔)类型”。我相当确定一切都是正确的,因为我使用 ver.2 得到了我期望的结果
  • mymask 中有 NaN 吗?还是其他可能导致向上转换数组的 dtype 的东西?
  • @JohnSmith 什么版本的 numpy?我无法在 numpy 1.13.1 / Python 3.6.0 上重现您的结果。两种方式都在数组中给出np.bool_
  • @ayhan 没有。我检查了输出,它只有 True 或 False

标签: numpy boolean


【解决方案1】:

好的,我发现了问题。我原来的帖子并不完全正确:我的面具是 pandas.Index。

看来 pands.Index.astype 的行为出乎意料(对我而言),因为我在以下方面得到了不同的行为:

mask = pindex.map(myfun).astype(np.bool_) # doesn't cast
mask = pindex.map(myfun).astype(np.bool_,copy=False) # doesn't cast
mask = pindex.map(myfun).values.astype(np.bool_) # does cast

也许它实际上是一个熊猫错误?这个结果让我感到惊讶,因为我的印象是 pandas 通常只是调用它所基于的 numpy 数组的函数。这显然不是这里的情况。

【讨论】:

  • 是的,我可以看到 index.astype 默默地忽略了 bool 选项。有不同的索引版本,如 Int64Index 和 Float64Index,但没有 BoolIndex;这可能是这里的原因,但我希望它会引发错误。无论如何,如果有人有兴趣打开一个问题,这里是重现的步骤:a = pd.Index([True, False]); a = a.astype('bool')
  • 顺便说一句,如果您正在处理其他人的代码,问题可能源于index.map 的行为最近发生了变化。它曾经返回一个 numpy 数组。
猜你喜欢
  • 2019-09-18
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
  • 2020-01-29
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
  • 2017-11-02
相关资源
最近更新 更多