熊猫似乎无法在列表中找到所有元素:
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”列的数据类型是object这一事实做些什么?
答案 0 :(得分:6)
如果使用in
运算符,它将不测试序列/列的值,而是索引值,docs:
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
答案 1 :(得分:2)
我不确定在这里做什么,但绝对不是您想要的(例如,要求2 in df["id"]
也会返回false
)
问题是您不与列表或集合一起使用。 因此,您有两个选择:
df["rid"].isin(["125264429"]).any()
或
"125264429" in df["rid"].to_list()
(可以再增加大约一百万,但是这些是我所看到的简单的东西)