我有两列在pandas框架应该是相同的。每列有许多NaN值。我想比较列,产生第三列包含True / False值;当列匹配时,True,当它们不匹配时,False。
这就是我所尝试的:
df['new_column'] = (df['column_one'] == df['column_two'])
字符串
以上方法适用于数字,但不适用于NaN值。
我知道我可以用一个没有意义的值来替换NaN(对于我的数据,这可能是-9999),然后在我准备回显比较结果时删除它,但是我想知道是否有一个更pythonic的方法我忽略了。
4条答案
按热度按时间xggvc2p61#
或者你可以使用
equals
方法:字符串
这是一个包含电池的方法,无论
dtype
或单元格的内容如何都可以工作。如果你愿意,你也可以把它放在一个循环中。w1jd8yoj2#
据我所知,Pandas并不认为NaN在元素级的相等和不相等比较方法上有什么不同。而在比较整个Pandas对象(Series,DataFrame,Panel)时,它会这样做。
NaN值被视为不同(即NaN!= NaN)。-source
全元素相等Assert
.eq()
分别比较每一行中两列的值。这将返回一系列Assert。
.eq()
方法与.fillna()
链接。字符串
选项2:之后使用
.loc()
和.isna()
替换NaNAssert。型
请注意,这两个选项对于 column_one 和 column_two 中的源数据都是非破坏性的。还值得看看Pandas文档中的working with missing data指南。
Object wise equality assertion
.equals()
将Pandas对象(Series,DataFrame,Panel)作为一个整体进行比较,将所有行及其顺序解释为单个值。这将返回一个布尔值(标量)。
型
wkyowqbh3#
你可以使用下面的循环,只要两个列的格式相同,它就可以工作,不管你的数组是否包含NAN
字符串
gijlo24d4#
也适用于“无”值。
字符串
结果df:
的数据