在列中找不到元素

2024-04-23 09:27:02 发布

您现在位置:Python中文网/ 问答频道 /正文

熊猫似乎无法在列表中找到所有元素:

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这一事实有关?你知道吗


Tags: inidfalsetrue元素dataframedf列表
2条回答

如果使用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

我不确定in在这里做什么,但肯定不是您想要的(例如,请求2 in df["id"]也返回false

问题是,你不能用在列表或集合中。 所以你有两个选择:

df["rid"].isin(["125264429"]).any()

或者

"125264429" in df["rid"].to_list()

(好的,可能还有一百万,但这些是我能看到的最简单的)

相关问题 更多 >