Pandas知识点-equals()与==的区别

共 1510字,需浏览 4分钟

 ·

2021-05-21 18:55


在Pandas中,equals()方法用于验证数据是否等效。


验证等效性需要进行比较,上一篇文章介绍了比较操作。较操作参考:Pandas知识点-比较操作

==和eq()方法可以用于比较Pandas中的数据,那equals()和它们有什么区别呢?本文会进行介绍。


一、返回值不同



equals()方法的返回值是一个布尔值。如果两个被比较数据中的所有元素都相同,则equals()返回True,否则返回False。


==比较两个DataFrame时,结果是一个由布尔值构成的DataFrame,比较两个Series时,结果是一个由布尔值构成的Series。



equals()的返回值相当于用numpy中的all()函数对==的结果再做一次判断。


不过,因为equals()和==的内部判断是有差异的,所以equals()与np.all(df1==df2)并不完全等价,可以继续看下面的介绍。


二、索引值对结果的影响不同



equals()比较两个DataFrame或Series,索引值相等的列或行可以进行比较,如索引1和1.0分别是整数和浮点数,但值是相等的,对应的行或列可以进行比较。



==比较两个DataFrame或Series,索引值相等时也可以进行比较,不过结果的索引会有变化,取决于比较的顺序。具体来说,比较结果的索引与==左边的DataFrame或Series相同。而使用eq()方法时,比较结果的索引与调用eq()的DataFrame或Series相同。


三、对空值的判断结果不同



equals()比较时,DataFrame或Series中的空值可以判断为相等。具体来说,两个np.NaN,两个None,两个pd.NaT,np.NaN与None这四种情况的比较结果都是相等的。而pd.NaT与np.NaN和None的比较结果为不相等。


==比较时,空值的比较结果都是不相等。



从Python解释器层面来判断,两个np.NaN和两个pd.NaT的比较结果都不相等,所以用==比较时,DataFrame中对应位置的结果为False。两个None的比较结果虽然相等,但因为在的DataFrame中None表示的是np.NaN,所以比较结果也为False。np.NaN和None比较也一样,结果为False。这也是前面说equals()与np.all(df1==df2)不完全等价的原因。


在判断两个DataFrame或Series是否等效时,空值对我们来说都是一样的。我们期望的结果是将空值判断为相等,这样可以避免空值对其他数据比较结果的干扰。equals()用于判断两个数据是否等效,刚好可以用于这样的场景。当然,也可以先将空值替换成其他值后再比较,那就是另一种方式了。


四、与array的比较不同



equals()比较DataFrame和array时,即使DataFrame与array的形状相同,数据也完全相同,比较结果也是False。原因是array没有索引,而equals()支持传入的参数是DataFrame或Series,不支持array。


==可以将DataFrame与array进行比较,比较结果为DataFrame。


以上就是Pandas中equals()与==的区别介绍,如果需要本文代码,可以点击关注公众号“Python碎片”,然后在后台回复“pandas11”关键字获取完整代码。


浏览 46
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐