Python数据清洗之重复数据处理

news2025/1/10 17:24:52

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

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

1.数据准备

以一个包含重复数据的示例数据集为例,演示重复数据的检测和删除方法:

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

2.检测重复数据:duplicated方法

duplicated方法用于检测数据框中重复的行,它会标记出除了第一次出现外的重复行。

2.1 基本用法

# 检测重复行
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方法标记了所有重复行中除了第一行外的重复记录。

2.2 根据特定列检测重复

如果只想根据某些列检测重复,可以指定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

3.删除重复数据:drop_duplicates方法

drop_duplicates方法用于删除重复行,并返回一个去重后的数据框。

3.1 基本用法

# 删除重复行
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会保留重复行的第一个记录。

3.2 保留最后一条记录

可以通过设置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

3.3 根据特定列删除重复

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

4.删除重复数据后重置索引

删除重复数据后,原始的索引可能不连续。可以通过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

5.实际案例:清洗用户数据

以下是一个结合duplicateddrop_duplicates的实际案例,展示如何处理重复的用户注册数据。

5.1 示例数据

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)

5.2 按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

5.3 按UserID和Name检测重复

如果用户可能因拼写错误多次注册,可以同时基于UserIDName检测重复:

# 标记重复记录
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方法用于清理重复记录并保留指定的记录。通过灵活设置参数,用户可以基于特定列检测重复数据,选择保留第一条或最后一条记录,甚至结合自定义逻辑进行深度清洗。在实际应用中,如用户注册数据清理,可以根据业务需求合理使用这些方法,快速消除冗余数据,确保分析结果的准确性和可靠性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2257019.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【实战教程】使用YOLO和EasyOCR实现视频车牌检测与识别【附源码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

【项目实战】基于python+爬虫的电影数据分析及可视化系统

注意:该项目只展示部分功能,如需了解,文末咨询即可。 本文目录 1.开发环境2 系统设计 2.1 设计背景2.2 设计内容 3 系统页面展示 3.1 用户页面3.2 后台页面3.3 功能展示视频 4 更多推荐5 部分功能代码 5.1 爬虫代码5.2 电影信息代码 1.开发环…

SDXL的优化工作

本文详细介绍SDXL在SD系列的基础上做了什么优化,包括模型架构优化和训练过程数据的相关优化策略。 目录 Stable Diffusion XL核心基础内容 SDXL整体架构初识 Base模型 Refiner模型 Base——VAE Base——U-Net Base——Text Encoder Refiner GPT补充【TODO】 SDXL官方…

计算机网络 —— HTTPS 协议

前一篇文章:计算机网络 —— HTTP 协议(详解)-CSDN博客 目录 前言 一、HTTPS 协议简介 二、HTTPS 工作过程 1.对称加密 2.非对称加密 3.中间人攻击 4.引入证书 三、HTTPS 常见问题 1.中间人能否篡改证书? 2.中间人能否调…

YonBuilder移动开发——调用手机系统的浏览器打开网页

概述 在YonBuilder移动开发中,可以通过使用引擎提供的 api.openWin 或者 api.openFrame 函数方法通过内置的浏览器引擎在App内部打开相关的远程H5网站的网页。但是在实际项目开发中,可能会有一种需求,调用手机操作系统提供的系统浏览器去打开…

美畅物联丨视频接入网关如何配置 HTTPS 证书

在安防领域,视频接入网关(Video Access Gateway,VAG)是视频监控系统的重要组成部分,其职责是把视频数据从前端设备传输至后端服务器。配置HTTPS证书后,可对视频流进行加密传输,避免数据在网络传…

Redis原理—2.单机数据库的实现

大纲 1.Redis数据库的结构 2.读写Redis数据库键值时的处理 3.Redis数据库的构成 4.Redis过期键的删除策略 5.Redis的RDB持久化 6.Redis的AOF持久化 7.Redis的AOF重写机制 8.Redis持久化是影响其性能的高发地 9.Redis基于子进程实现持久化的使用建议 10.Redis持久化的…

Android平台GB28181设备接入模块动态文字图片水印技术探究

技术背景 前几年,我们发布的了Android平台GB28181设备接入模块,实现了不具备国标音视频能力的 Android终端,通过平台注册接入到现有的GB/T28181—2016或GB/T28181—2022服务。 Android终端除支持常规的音视频数据接入外,还可以支…

TaskBuilder SQL执行工具

为了方便开发者连接当前任擎服务器上配置的各个数据源对应的数据库进行相关操作,TaskBuilder提供了一个SQL执行工具,点击系统侧边栏里的执行SQL图标 ,即可打开该工具,界面如下图所示: 该工具从上至下分为三个区域&a…

Redis中pipeline(管道)详解

redis管道pipeline 举个例子: 小卖铺免费让你拿50瓶饮料,你是一次拿一瓶拿回家,还是打包一次或者多次拿回家? 概念 Redis管道(pipelining)是一种在客户端向服务端发送多个请求而不等待响应的技术。它可以显著提高Redis应用程序…

01-Chromedriver下载与配置(mac)

下载地址: 这里我用的最后一个,根据自己chrome浏览器选择相应的版本号即可 ChromeDriver官网下载地址:https://sites.google.com/chromium.org/driver/downloads ChromeDriver官网最新版下载地址:https://googlechromelabs.git…

【Linux操作系统】Linux常用一键脚本

Linux网络加速脚本 Linux网络加速脚本可以替换Linux内核和更改TCP拥塞算法的一键脚本,包括安装BBR内核、XANMOD官方内核,开启BBR加速等功能,总之非常强大。 不卸载内核脚本(一般用这个) wget -O tcpx.sh "http…

Linux -文件系统的备份

本文为Ubuntu Linux操作系统- 第九弹~~ 今天接着上文的内容,讲Linux磁盘存储管理最后一部分内容~ 上期回顾:Linux 图形界面工具管理磁盘分区和文件系统 😎黑犀铠甲合体,流星枪之狂瀑扎帖,碎魔伏暴,灭于狂瀑…

ECharts实战教程:如何生成动态水波纹效果

导语:在数据可视化领域,ECharts是一款非常强大的图表库。今天,我们将带领大家学习如何使用ECharts生成动态水波纹效果,让我们的图表更加生动有趣。 一、准备工作 首先,我们需要准备一些基础数据,如下所示&…

PyQt信号槽实现页面的登录与跳转 #页面进一步优化

将登录框中的取消按钮使用信号和槽的机制,关闭界面。 将登录按钮使用信号和槽连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是否为"123456",如果账号密码匹配成功,当前界面关…

STM32CUBEMX+STM32F405RGT6+I2C+AT24C02学习应用

I2C 通讯 机制 较为 繁琐 , 但是I2C的速率比较低,而且EEPROM的容量不大,比如AT24C02的容量 只有 2Kb,即256B(字节)。 对于 想快速实现I 2 C 功能应用,我们借助STM32的HAL库函数 可以 做到 。 一…

Python 基础学习(一)

一.基础语法 注释 Python中单行注释以 # 开头,如下: #!/usr/bin/python3# 第一个注释 print ("Hello, Python!") # 第二个注释多行注释可以用多个 # 号,还有 ‘’’ 和 “”": #!/usr/bin/python3# 第一个注释…

guava 整合springboot 自定义注解实现接口鉴权调用保护

文章目录 一、简要概述二、实现过程1. pom引入依赖2. 自定义注解3. 定义切面4. 定义权限检查逻辑 三、注解使用四、运行结果五、源码放送 一、简要概述 Guava Cache是一个全内存的本地缓存实现,它提供了线程安全的实现机制。我们借助expireAfterWrite过期时间设置和…

Redis实战篇(二:商户查询缓存)

目录 三、商户查询缓存 1.缓存介绍 2.添加商户缓存 (1)缓存模型和思路 (2)代码实现 3.店铺类型缓存 4.缓存更新策略 5.实现商铺缓存与数据库双写一致 6.缓存穿透 (1)介绍 (2&#x…

etcd分布式存储系统快速入门指南

在分布式系统的复杂世界中,确保有效的数据管理至关重要。分布式可靠的键值存储在维护跨分布式环境的数据一致性和可伸缩性方面起着关键作用。 在这个全面的教程中,我们将深入研究etcd,这是一个开源的分布式键值存储。我们将探索其基本概念、特…