如何检查Pandas DataFrame的某一列是否包含指定值?
检查pandas Series/DataFrame列是否包含指定值的方法
你遇到"h" in df["two"]返回False的原因:
对Series直接使用in运算符时,pandas默认检查的是索引标签而非元素值,你的示例中df["two"]的索引是[0,1,2],自然找不到值"h",所以返回False。
推荐的检查方法
1. 通用最优方案:isin() + any()组合
这是最清晰、兼容性最强的写法,同时支持单个值、多个值的检查:
# 检查单个值是否存在 df["two"].isin(["h"]).any() # 返回 True # 支持同时检查多个值是否存在(只要有一个存在就返回True) df["two"].isin(["e", "h"]).any() # 返回 True
逻辑说明:
.isin()接收一个可迭代对象,返回和Series长度一致的布尔Series,对应位置元素在传入列表中则为True,否则为False.any()会判断布尔Series中是否存在至少一个True,最终返回布尔值作为结果
2. 单值检查简化写法:等值判断 + any()
如果只需要检查单个值,也可以用逐行等值判断的写法,可读性也很高:
df["two"].eq("h").any() # 返回 True
3. 可选写法:转numpy数组后用in检查
如果习惯用in的写法,可以先取Series的values属性得到numpy数组,此时in会检查数组元素:
"h" in df["two"].values # 返回 True
注意:该写法在数据量很大时性能不如isin()优化程度高,且处理缺失值的兼容性略差,仅建议熟悉numpy的用户使用。
内容的提问来源于stack exchange,提问作者Joooeey
相关产品推荐
相关产品推荐

