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
相关产品推荐
相关产品推荐

