You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

np.isin处理含多数据类型的pandas Index时结果不符合预期的问题咨询

np.isin处理含多数据类型的pandas Index时结果不符合预期的问题咨询

我最近碰到了一个特别奇怪的问题,想请教下大家这到底是怎么回事:

场景是这样的:我想找出numpy数组或者pandas Index中,那些存在于一个预定义的多数据类型列表里的元素。先看初始化的代码:

lst = ["A", "B", 1, 2, "C", 3]
test = ["B", 1, 2, "C"]

arr = np.array(lst)
idx = pd.Index(lst)

按常理来说,下面这三种调用np.isin的结果应该完全一致才对:

# 预期的正确结果是:array([False, True, True, True, True, False])
np.isin(lst, test) == np.isin(arr, test) == np.isin(idx, test)

但实际运行后发现,Index对象的表现完全不符合预期,得到的结果是:

# 实际得到的结果:array([False, True, False, False, True, False])
np.isin(idx, test)

我还做了后续的测试:就算把Index转换成numpy数组,结果还是不对,但如果转换成普通列表,就又回到了预期的正确结果:

# 转换为numpy数组后结果依旧不符合预期
np.isin(idx.to_numpy(), test)  # array([False, True, False, False, True, False])
# 转换为列表后结果符合预期
np.isin(idx.to_list(), test)  # array([False, True, True, True, True, False])

更诡异的是,如果我不是用原始列表初始化Index,而是用已经创建好的numpy数组来初始化,那一开始的结果就完全符合预期了:

idx_from_arr = pd.Index(arr)
# 三者结果完全一致,都是预期的正确结果:array([False, True, True, True, True, False])
np.isin(lst, test) == np.isin(arr, test) == np.isin(idx_from_arr, test)

我现在搞不懂这到底是pandas的bug,还是有意设计的行为?有没有人能解释下背后的原因?

备注:内容来源于stack exchange,提问作者Jon Nir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 15:14:31