首页 > 解决方案 > 使用“in”查找值是否存在于 Pandas 数据框列中不起作用?

问题描述

我目前正在编写一个脚本来过滤来自自动化机器周期的 csv 输出数据。我想要的是提供一个循环的开始和停止的索引,并检查机器“状态”列是否包含一个 int 值 12。我正在查看前两个循环并运行完全相同的代码,但较小的索引不同l 数据框。对于第一个周期 [0:16],v 按预期返回 true。但是,即使状态列包含 12,第二个循环仍将 v 返回为 False。目标是最终在列表中找到每个循环的索引(当 key == 102 时)并循环查找状态 12 是否执行在每个周期。

这是数据帧第一个周期的快照: 第一个周期

这是第二个周期前半部分的快照: 第二个周期

两个数据框在状态列中的值为 12。所以如果我使用'in',它应该返回True。

L = df[0:16]

#exists = 12 in L.state

v = 12 in L.state
print(v)

上面按预期返回 True 。

L = df[16:51]

#exists = 12 in L.state

v = 12 in L.state
print(v)

以上返回 False ,这让我感到困惑。

由于相同的数据帧用于制作较小的 L 数据帧和相同的 12 在 L.state 调用中返回一个布尔值。有谁知道我错过了什么,为什么这段代码在第二组索引上的执行方式不同?

标签: pythonpandasdataframe

解决方案


这是因为当你in用来做一个系列的比较时,它是在检查索引。如果要检查值,请使用v = 12 in L.state.values. 我在相关的 SO 评论中看到了这个答案。

https://stackoverflow.com/a/40419531/14473410


推荐阅读