【问题标题】:drop_duplicates() not working because it does not find any duplicates?drop_duplicates() 不起作用,因为它没有找到任何重复项?
【发布时间】:2021-01-31 18:30:33
【问题描述】:

我上周开始使用 Pandas,所以我可能会错过一些东西,但这是我的问题。在网上商店抓取产品评论时,我获得了撰写评论的用户的 ID。因为我想获得更多数据,所以我扩展了一个数据框来收集这些用户撰写的其他产品的所有其他评论。因此,从逻辑上讲,当我扩展数据框时,我应该找到两次相同的 user_ID、review_text 和 product_ID(用户为其撰写评论的产品)。因此,对于给定的用户,我的数据框基本上是这样的:

index product_id product_num_review product_review_score user_id user_review_text
5 1186030 6 0 76561197971290677 Garbage product!
470 1239050 NaN NaN 76561197971290677 I like it
471 1311250 NaN NaN 76561197971290677 Meh
472 1186030 NaN NaN 76561197971290677 Garbage product!
473 1197370 NaN NaN 76561197971290677 Good!

所以在这里,我有两个重复项,第 5 行和第 472 行。第 472 行中有 NaN,因为在扩展评论和抓取这条评论时,我无法抓取其他信息(比如例如这个产品。)

由于它可能是尾随空格,或者评论可能已经在两个实例之间进行了修改(非常不可能但仍然如此),因此我排除根据评论文本检查重复项,而是决定删除具有同一对 product_id/user_id。

df =df.drop_duplicates(subset=["product_id", "user_id"], keep="first")

这里的问题是 pandas 没有检测到任何重复项!我通过这样做验证了它:

df.duplicated(subset=["product_id", "user_id"]) 

并且所有返回的都是 False,这意味着没有找到重复项。

我尝试过的: 我检查了问题是否与列类型有关,并且在做之后

print(df.dtypes)

它告诉我 product_id 和 user_id 都是对象类型。将它们转换为 int 或 str 不会改变结果。

所以我在这里,不知道这里有什么问题。因为有重复,这是肯定的,但为什么 pandas 没有检测到它?我敢肯定这是一个菜鸟的错误,但我在这里有点迷失了。感谢您的帮助。

【问题讨论】:

  • 你确定没有额外的空格吗?
  • 它刚刚工作,当然是在我发布问题之后啊哈!我所做的是将列转换为 int,它起作用了。我以为我做到了,但显然没有。
  • 这样有效吗?酷
  • 同时查看列名。您的数据框中有“product_ID”,但您尝试在“product_id”列中查找重复项。
  • 哦,是的,很抱歉。它是一种类型,它确实是我的数据框中的 product_id。我已经编辑了我的帖子,感谢您指出这一点。

标签: python pandas dataframe duplicates


【解决方案1】:

好的,所以我解决了这个问题,即使我不确定我能否解释它。 我在我的问题中写道,我试图将列转换为 int,但显然我第一次以错误的方式编写了它。所以我所做的如下:

df2["product_id"] = pd.to_numeric(df2["product_id"])
df2["user_id"] = pd.to_numeric(df2["user_id"])

它成功了!

【讨论】:

    猜你喜欢
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 2019-05-11
    • 2012-10-10
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多