【Python学习】Python数据清洗之重复数据处理!
在数据处理和分析的过程中,重复数据是一个常见的问题。重复的数据不仅会影响数据的准确性,还可能导致模型训练中的偏差。因此,检测并清理重复数据是数据清洗中的重要步骤。
·
包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】!
在数据处理和分析的过程中,重复数据是一个常见的问题。重复的数据不仅会影响数据的准确性,还可能导致模型训练中的偏差。因此,检测并清理重复数据是数据清洗中的重要步骤。
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%免费】

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