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

pandas DataFrame中is运算符判断相同iloc取值返回False的原因

问题解答

首先明确核心前提:Python的is运算符比较的是两个对象的内存地址,也就是判断两个名称是否指向内存中完全同一个实例,不负责判断值是否相等,值相等判断需要用==。

你遇到的返回False的情况,本质原因都是每次调用iloc取值时,pandas都会返回一个新创建的独立对象,两次调用生成的对象内存地址不同,分两种场景具体说明:

  • 场景1:dt.iloc[1] is dt.iloc[1]
    单参数调用iloc[1]会取索引位置为1的整行数据,返回值是一个Series对象。每次执行dt.iloc[1]时pandas都会重新构造一个新的Series实例,哪怕两个实例存储的内容完全一致,也是内存里互不相关的两个对象,因此is判断返回False。
    你可以通过打印对象内存地址验证:
    import pandas as pd
    
    dt = pd.DataFrame({
    'name' : ['o', 'a', 'x'],
    'mark' : [7, 4, 10]
    })
    
    row1 = dt.iloc[1]
    row2 = dt.iloc[1]
    print(id(row1), id(row2))  # 两个地址完全不同
    print(row1 == row2)        # 值比较会返回True
    
  • 场景2:dt.iloc[1,2] is dt.iloc[1,2]
    首先你构造的dt只有2列,列的位置索引范围是0~1,iloc[1,2]本身会触发索引越界错误,属于笔误。如果是取合法位置的单个单元格标量值出现is判断为False的情况,原理和取行一致:pandas返回标量值时(尤其是numpy数值类型、字符串类型),多数场景会新建值对象,两次调用得到的是两个独立实例,内存地址不同,is判断自然返回False。

提示:日常写pandas代码时,判断内容是否相等一律用==,不要用is做值判断,is仅适合用来判断对象是否是单例(比如is None这类场景)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:51:26