在这里插入图片描述


包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】!

在这里插入图片描述

在数据处理和分析的过程中,重复数据是一个常见的问题。重复的数据不仅会影响数据的准确性,还可能导致模型训练中的偏差。因此,检测并清理重复数据是数据清洗中的重要步骤。
Python 的 Pandas 提供了强大的功能来检测、标记和删除重复数据,同时可以灵活设置规则以满足各种场景需求。本文将深入讲解 Pandas 中重复数据处理的常用方法,包括"duplicated"方法检测重复、"drop_duplicates"方法删除重复数据,并结合实际案例展示不同的清理策略。

为什么要处理重复数据

重复数据可能由多种原因引起,例如数据录入错误、重复采集或合并数据集时的重复记录。处理重复数据的目的包括:
  • 提升数据质量:减少数据中的冗余信息,确保数据一致性。
  • 提高分析效率:避免重复数据导致的结果偏差。
  • 优化存储空间:减少存储资源的浪费。
无论是数据分析还是机器学习,处理重复数据都是保证数据可靠性的关键步骤。

数据准备

以一个包含重复数据的示例数据集为例,演示重复数据的检测和删除方法:
import pandas as pd      # 示例数据   
data = {"Name": ["Alice", "Bob", "Alice", "David", "Bob", "Eve", "Alice"],
        "Age": [25, 30, 25, 35, 30, 40, 25],       
        "City": ["NY", "LA", "NY", "SF", "LA", "NY", "NY"]   }      
df = pd.DataFrame(data)   
print("原始数据:\n", df)   
输出:
Name  Age City   0   Alice   25   NY   1     Bob   30   LA   2   Alice   25   NY   3   David   35   SF   4     Bob   30   LA   5     Eve   40   NY   6   Alice   25   NY

检测重复数据:duplicated方法

duplicated方法用于检测数据框中重复的行。它会标记出除了第一次出现外的重复行。
基本用法
# 检测重复行   
df["Is_Duplicate"] = df.duplicated()   
print("标记重复行后的数据:\n", df)   
输出:
Name  Age City  Is_Duplicate   0   Alice   25   NY         False   1     Bob   30   LA         False   2   Alice   25   NY          True   3   David   35   SF         False   4     Bob   30   LA          True   5     Eve   40   NY         False   6   Alice   25   NY          True
可以看到,"duplicated"方法标记了所有重复行中除了第一行外的重复记录。

根据特定列检测重复

如果只想根据某些列检测重复,可以指定"subset"参数。例如:
# 根据Name和City列检测重复   
df["Is_Duplicate_Subset"] = df.duplicated(subset=["Name", "City"])   
print("根据特定列标记重复行后的数据:\n", df)   
输出:
Name  Age City  Is_Duplicate  Is_Duplicate_Subset   0   Alice   25   NY         False                False   1     Bob   30   LA         False                False   2   Alice   25   NY          True                 True   3   David   35   SF         False                False   4     Bob   30   LA          True                 True   5     Eve   40   NY         False                False   6   Alice   25   NY          True                 True

删除重复数据:drop_duplicates方法

"drop_duplicates"方法用于删除重复行,并返回一个去重后的数据框。
基本用法
# 删除重复行   
df_deduplicated = df.drop_duplicates()   
print("删除重复行后的数据:\n", df_deduplicated)   
输出:
Name  Age City  Is_Duplicate  Is_Duplicate_Subset   0   Alice   25   NY         False                False   1     Bob   30   LA         False                False   3   David   35   SF         False                False   5     Eve   40   NY         False                False
默认情况下,"drop_duplicates"会保留重复行的第一个记录。

保留最后一条记录

可以通过设置"keep"参数为"last"来保留重复记录的最后一条:
# 保留最后一条记录   
df_last = df.drop_duplicates(keep="last")   
print("保留最后一条重复记录后的数据:\n", df_last)   
输出:
Name  Age City  Is_Duplicate  Is_Duplicate_Subset   2   Alice   25   NY          True                 True   4     Bob   30   LA          True                 True   3   David   35   SF         False                False   5     Eve   40   NY         False                False

根据特定列删除重复

与"duplicated"方法类似,"drop_duplicates"也支持按特定列删除重复数据:
# 根据Name和City列删除重复   
df_deduplicated_subset = df.drop_duplicates(subset=["Name", "City"])   
print("根据特定列去重后的数据:\n", df_deduplicated_subset)   
输出:
Name  Age City  Is_Duplicate  Is_Duplicate_Subset   0   Alice   25   NY         False                False   1     Bob   30   LA         False                False   3   David   35   SF         False                False   5     Eve   40   NY         False                False

删除重复数据后重置索引

删除重复数据后,原始的索引可能不连续。可以通过"reset_index"方法重置索引:
# 重置索引   
df_cleaned = df_deduplicated.reset_index(drop=True)   
print("重置索引后的数据:\n", df_cleaned)   
输出:
Name  Age City   0   Alice   25   NY   1     Bob   30   LA   2   David   35   SF   3     Eve   40   NY

实际案例:清洗用户数据

以下是一个结合"duplicated"和"drop_duplicates"的实际案例,展示如何处理重复的用户注册数据。
示例数据
user_data = {"UserID": [101, 102, 103, 101, 104, 102],
             "Name": ["Alice", "Bob", "Charlie", "Alice", "David", "Bob"],       
             "SignupDate": ["2023-01-01", "2023-01-02", "2023-01-03", "2023-01-04", "2023-01-05", "2023-01-06"]}      user_df = pd.DataFrame(user_data)   
print("用户注册数据:\n", user_df)   

按UserID检测并保留最后一次注册
# 保留每个UserID的最新注册记录   
user_df_cleaned = user_df.drop_duplicates(subset=["UserID"], keep="last")   
print("清洗后的用户注册数据:\n", user_df_cleaned)   
输出:
UserID     Name  SignupDate   1     102      Bob  2023-01-06   2     103  Charlie  2023-01-03   3     101    Alice  2023-01-04   4     104    David  2023-01-05

按UserID和Name检测重复

如果用户可能因拼写错误多次注册,可以同时基于"UserID"和"Name"检测重复:
# 标记重复记录   
user_df["Is_Duplicate"] = user_df.duplicated(subset=["UserID", "Name"])   
print("标记重复后的用户注册数据:\n", user_df)   
输出:
UserID     Name  SignupDate  Is_Duplicate   0     101    Alice  2023-01-01         False   1     102      Bob  2023-01-02         False   2     103  Charlie  2023-01-03         False   3     101    Alice  2023-01-04          True   4     104    David  2023-01-05         False   5     102      Bob  2023-01-06          True

总结

  • 在数据分析和清洗中,重复数据处理是确保数据质量的重要步骤。
  • Python Pandas 提供了强大的工具来高效检测和删除重复数据,其中"duplicated"方法可标记重复行,而"drop_duplicates"方法用于清理重复记录并保留指定的记录。
  • 通过灵活设置参数,用户可以基于特定列检测重复数据,选择保留第一条或最后一条记录,甚至结合自定义逻辑进行深度清洗。在实际应用中,如用户注册数据清理,可以根据业务需求合理使用这些方法,快速消除冗余数据,确保分析结果的准确性和可靠性。
    图片

总结

  • 最后希望你编程学习上不急不躁,按照计划有条不紊推进,把任何一件事做到极致,都是不容易的,加油,努力!相信自己!

文末福利

  • 最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。
包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】领取!
  • ① Python所有方向的学习路线图,清楚各个方向要学什么东西
  • ② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
  • ③ 100多个Python实战案例,学习不再是只会理论
  • ④ 华为出品独家Python漫画教程,手机也能学习

可以扫描下方二维码领取【保证100%免费在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐