我有1000000到99999999年间的熊猫系列。它们是序列号,所以它们经常重复。unique()函数的目的是在一个系列中删除重复项,但是请参阅下面的代码。
>>> 10296765 in data.OriginatorUniqueId
True
>>> 10296765 in data.OriginatorUniqueId.unique()
False我不知道该怎么解释,有没有一个合理的解释,为什么会发生这种情况?
发布于 2021-06-07 19:10:12
它是in方法的不同实现。in方法实际上是用相应对象的__contains__方法实现的。对于DataFrame,即:
def __contains__(self, key) -> bool_t:
"""True if the key is in the info axis"""
return key in self._info_axis对于一个系列,信息轴是行索引,对于一个DataFrame,信息轴是列索引,所以您正在检查该值是否是索引标签,而不是底层numpy数组中的数据值。
另一方面,numpy.ndarray检查数组本身的值(numpy数组没有像熊猫那样的索引,那么还需要检查什么呢?)
ndarray.__contains__(key, /)
Return key in self.下面是一个具体的例子:
import pandas as pd
df = pd.DataFrame(columns=['foo'], index=['a'], data=7)
# foo
#a 7
# DataFrame.__contains__ checks for the column labels
'foo' in df
#True
# Series.__contains__ checks for the Index labels
'a' in df['foo']
# True
# ndarray.__contains__ checks against the data in the array
7 in df.to_numpy()
# Truehttps://stackoverflow.com/questions/67877127
复制相似问题