首页 > 解决方案 > 熊猫没有在列中找到元素

问题描述

Pandas 似乎没有找到列表中的所有元素:

df = pd.DataFrame({"rid": ["125264429", "a"], "id": [1, 2]})
1 in df["id"]                # <- expect True, get True
"125264429" in df["rid"]     # <- expect True, get False
df[df["rid"] == "125264429"] # <- yields result

我确信对这种行为有一个完全合理的解释,但我似乎找不到它。最后两列似乎相互矛盾。它是否与“rid”列的数据类型是对象这一事实有关?

标签: pythonpandas

解决方案


如果使用in运算符,它测试的不是系列/列的值,而是索引值,文档

print(1 in df["id"])              # <- expect True, get True
print("125264429" in df["rid"])     # <- expect True, get False 

是一样的:

print(1 in df["id"].index)              # <- expect True, get True
print("125264429" in df["rid"].index)     # <- expect True, get False

因此,如果将值转换为 numpy 数组或列出它按预期工作:

print(1 in df["id"].values)              # <- expect True, get True
print("125264429" in df["rid"].values)     # <- expect True, get True

print(1 in df["id"].tolist())              # <- expect True, get True
print("125264429" in df["rid"].tolist())     # <- expect True, get True

推荐阅读