Pandas.Index.isin()在处理大数据集时失败

Pandas.Index.isin()在处理大数据集时失败,pandas,debugging,dataframe,indexing,Pandas,Debugging,Dataframe,Indexing,这里有一个例子 创建一个包含100个相同行的表: >>> df = pd.DataFrame([('20170101', 'TULIP', 'FLOWER')] * 100000000, columns = ['DATE', 'NAME', 'TYPE']) 将前两列设置为索引: >>> df.set_index(['DATE', 'NAME'], inplace=True) 然后检查索引是否在[('20170101','TULIP')]中,这对于所有行都

这里有一个例子

创建一个包含100个相同行的表:

>>> df = pd.DataFrame([('20170101', 'TULIP', 'FLOWER')] * 100000000, columns = ['DATE', 'NAME', 'TYPE'])
将前两列设置为索引:

>>> df.set_index(['DATE', 'NAME'], inplace=True)
然后检查索引是否在
[('20170101','TULIP')]
中,这对于所有行都应该是正确的:

>>> df.index.isin([('20170101', 'TULIP')])
array([False, False, False, ..., False, False, False], dtype=bool)
所以熊猫给出的结果是错误的——所有的结果都是
False
。事实上,如果我只检查前1M行,它会给出正确的结果:

>>> df[:1000000].index.isin([('20170101', 'TULIP')])
array([ True,  True,  True, ...,  True,  True,  True], dtype=bool)

这是熊猫身上的虫子吗?还是我遗漏了什么?

在@Jeff对OP的评论中,这个问题将在0.21版中修复。

我认为这是一个bug。我认为有些地方出了问题,内部使用了
np.inad
。事实上,
np.in1d(df[:1000000].index.values,[('20170101',TULIP')])
给出了一个
False
值数组。请参见与
isIn
和>1m记录相关的内容。@JanTrienes,有趣-那么您是否仍然认为我应该向Pandas报告bug报告,或者这是一个已知但无法修复的问题?这已经为0.21解决了: