You need to enable JavaScript to run this app. 为何在pandas Series中用in判断整数存在会出现不符合预期的False结果
优惠活动
大模型
产品
解决方案
定价
更多

为何在pandas Series中用in判断整数存在会出现不符合预期的False结果

问题原因

这个异常结果是pandas中in操作符作用于Series时的默认行为和预期不一致导致的:

  • 对Python原生列表执行x in 列表时,检查的是x是否为列表的元素值
  • 对pandas的Series执行x in Series时,默认检查的是x是否存在于Series的**索引(index)**中,而非Series的值列表

你测试用例中的两个DataFrame都使用默认生成的整数索引,索引值为[0,1,2,3]:

  • 执行2 in source_series_1.col_2时,2刚好在索引列表中,因此返回True,和值列表的校验结果巧合一致
  • 执行102 in source_series_2.col_2时,102不在索引列表中,因此返回False,和你预期的值校验结果不符

转成列表后校验符合预期,就是因为列表的in操作回归了值校验的逻辑。


正确的成员校验写法

如果需要判断某个值是否在Series的值列表中,推荐使用以下两种写法:

  1. 显式访问Series的values属性:x in series.values
  2. 使用pandas自带的isin方法:series.isin([x]).any()

对应你的测试场景,示例如下:

import numpy as np
import pandas as pd

source_series_1 = pd.DataFrame({'col_1': ['a','b','c','d'], 'col_2':np.int64([1, 2, 3, 4])})
source_series_2 = pd.DataFrame({'col_1': ['a','b','c','d'], 'col_2':np.int64([101, 102, 103, 104])})

# 写法1
print(np.int64(2) in source_series_1.col_2.values) # 输出True
print(np.int64(102) in source_series_2.col_2.values) # 输出True

# 写法2
print(source_series_1.col_2.isin([np.int64(2)]).any()) # 输出True
print(source_series_2.col_2.isin([np.int64(102)]).any()) # 输出True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 09:06:01