熊猫未在“列”中找到元素

时间:2019-08-28 14:24:38

标签: python 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”列的数据类型是object这一事实做些什么?

2 个答案:

答案 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()

(可以再增加大约一百万,但是这些是我所看到的简单的东西)