You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas中使用.eq()比较DataFrame时结果全为False的问题

问题根因

.eq()返回全False是pandas序列运算的默认对齐规则导致的,和值本身没关系:
pandas对两个Series做逐元素比较时,会先按索引对齐配对,只有索引相同的位置才会比较值,索引不匹配的位置比较结果一律为False。
从你打印的输出能看到两个序列长度、索引覆盖范围完全不一样:

  • df['ano']总长度为1,仅索引0位置存了值2021
  • df2['ano']总长度为94,索引覆盖0~93,其中索引0位置值是2020,索引92、93位置才存了2021

实际比较时的逻辑是:

  1. 只有索引0位置两边都有值,比较的是2021和2020,结果为False
  2. 1~93的所有索引位置,df['ano']没有对应匹配的索引,全部返回False
  3. 你看到df2里92、93行的2021,因为这两个索引在df['ano']里根本不存在对应条目,不会触发值相等的判断,所以最终输出全是False。
对应修复方案

按你实际的业务需求选写法即可:

  • 如果你要判断df2['ano']每个位置的值是否等于df里存的那个ano值(也就是2021),直接取标量比较,不需要走Series对齐逻辑:
# 取出df里ano的第一个标量值做全局比较
df2['ano'].eq(df['ano'].iloc[0])

执行后92、93行位置会正常返回True。

  • 如果你的df['ano']后续可能有多个值,要判断df2的ano是否在df的ano值集合里,用包含判断:
df2['ano'].isin(df['ano'])
  • 如果你就是想按位置顺序逐位比较(完全忽略索引),需要先转成无索引的数组再运算,注意这种写法要求两个序列长度完全一致,你当前两个序列长度差很多,直接用会报长度不匹配错误:
# 仅两个序列长度相同时使用,严格按位置0对0、1对1匹配比较
pd.Series(df['ano'].to_numpy() == df2['ano'].to_numpy())

内容的提问来源于stack exchange,提问作者null92

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 20:18:19