【问题标题】:How to delete a specific row in pandas dataframe如何删除熊猫数据框中的特定行
【发布时间】:2020-01-04 19:20:52
【问题描述】:

我想删除 9 行具有重复 ID 的行,为它们获取索引然后尝试删除,但删除后的长度显示 714 行已被删除。熊猫索引不是唯一的吗?我怎样才能正确地做到这一点

我搜索了 pandas 数据框并确定了我想要删除的行。写下 ID,然后尝试删除,但似乎出了点问题。 我怀疑熊猫索引不是唯一的,并且删除了超出预期的行。 如何创建唯一索引或如何正确使用索引?

len(CrimeClean) #result 690130

CrimeCleanV1 = CrimeClean.drop([5650, 3725, 6373, 2469, 7751, 7058, 3859, 3640, 3141])
#Validation, row 7751 should not appear
CrimeCleanV1[CrimeCleanV1.Crime_ID == "56882eb6d444d5677ac90c06a0582fe70fe1fd932fd5bd902a5aa4a2aa363bf3"]

#Only one row instead of two appeared as intended

len(CrimeCleanV1) #result 689416

【问题讨论】:

  • 您是否已经考虑过使用drop_duplicates?是索引中的 5650 个标签,还是行号?
  • 我试图删除的行只有重复的 ID,但它们并不完全相同,所以 drop_duplicates 不会删除它们。 5650 和我从最左侧第一张图片中搜索得到的其余数字(仍然不确定它们是否是索引)@jottbe
  • 在这种情况下,它们是索引标签。它应该工作。可能只是,您的索引由于某种原因不是唯一的(例如,在连接两个数据帧之后)。如果你这样做CrimeClean.loc[[5650... 会发生什么?您获得的行数是否与您拥有的 id 一样多?
  • 我尝试了 CrimeClean.loc[5650],它给了我 89 个不同的行!它也可能有用,但数据框最初是一次导入 103 个不同的 csv 文件
  • 我运行了 CrimeClean = CrimeClean.reset_index(drop=True) 并重新搜索 编辑了索引然后删除了它,它运行良好。谢谢

标签: pandas pyspark jupyter-notebook


【解决方案1】:

您在评论中写道:它们并不完全相同。 所以我假设将行标记为重复的标准是 list 列数,应该是唯一的。

所以你可以删除重复项,传递 subset 参数,只需 此列列表。

要决定的另一点是实际上要复制哪些行 已删除(keep 参数)- 离开 第一次 出现/离开 最后一次出现/全部删除

关于您的数据的另一个重要测试是运行:

CrimeClean[CrimeClean.index in [...]]

替换为 [...] 与您在 CrimeClean.drop 中使用的相同列表。

然后你会看到,传递的 id 值存在多少行。

【讨论】:

    【解决方案2】:

    你可以这样做:

    CrimeCleanV1.reset_index(drop=True,inplace=True)
    

    然后

    CrimeCleanV1[~CrimeCleanV1.index.isin([List with your row numbers where now they are indexes])]
    

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 2017-01-15
      • 2020-10-18
      • 2019-11-12
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 2022-11-08
      相关资源
      最近更新 更多