数据清洗:Pandas数据处理入门

学习目标

本课程将引导学员了解数据清洗的基本概念,掌握使用Pandas库处理数据集中的缺失值、重复数据和异常值的方法,确保数据的质量,为后续的数据分析和机器学习任务打下坚实的基础。

相关知识点

  • Pandas数据清洗

学习内容

1 Pandas数据清洗

1.1 处理缺失值

在数据处理中,缺失值是一个常见的问题。缺失值可能由多种原因造成,如数据收集过程中的错误、数据录入时的遗漏等。处理缺失值的方法有很多,包括删除含有缺失值的行或列、填充缺失值等。Pandas库提供了多种处理缺失值的函数,使得这一过程变得简单高效。

1.1.1 检测缺失值

在处理缺失值之前,首先需要检测数据集中哪些位置存在缺失值。Pandas中的isnull()函数可以用来检测数据集中的缺失值,返回一个布尔值的DataFrame,其中True表示该位置存在缺失值,False表示该位置数据完整。

import pandas as pd# 创建一个包含缺失值的示例数据集
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', None],'Age': [25, 30, None, 35, 40],'Salary': [50000, 60000, 70000, None, 80000]}
df = pd.DataFrame(data)# 检测缺失值
missing_values = df.isnull()
print(missing_values)
1.1.2 删除缺失值

如果数据集中的缺失值较少,且删除这些缺失值不会对分析结果产生显著影响,可以考虑删除含有缺失值的行或列。Pandas中的dropna()函数可以用来删除含有缺失值的行或列。

import pandas as pd# 创建一个包含缺失值的示例数据集
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', None],'Age': [25, 30, None, 35, 40],'Salary': [50000, 60000, 70000, None, 80000]}
df = pd.DataFrame(data)
# 删除含有缺失值的行
df_cleaned = df.dropna()
print(df_cleaned)# 删除含有缺失值的列
df_cleaned_columns = df.dropna(axis=1)
print(df_cleaned_columns)
1.1.3 填充缺失值

在某些情况下,删除含有缺失值的行或列可能会导致数据集的样本量大幅减少,影响分析结果的准确性。此时,可以考虑使用填充的方法来处理缺失值。Pandas中的fillna()函数可以用来填充缺失值,常见的填充方法包括使用固定值、前向填充、后向填充等。

import pandas as pd# 创建一个包含缺失值的示例数据集
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', None],'Age': [25, 30, None, 35, 40],'Salary': [50000, 60000, 70000, None, 80000]}
df = pd.DataFrame(data)
print("===================")
# 使用固定值填充缺失值
df_filled = df.fillna(0)
print(df_filled)
print("===================")
# 使用前向填充(csdn的运行环境可能有问题,到自己本地执行!)
df_ffilled = df.fillna(method='ffill')
print(df_ffilled)
print("===================")
# 使用后向填充(csdn的运行环境可能有问题,到自己本地执行!)
df_bfilled = df.fillna(method='bfill')
print(df_bfilled)
  • 前向填充(ffill):df.fillna(method=‘ffill’) 会使用当前缺失值的前一个非缺失值来填充该缺失值。可以理解为
    “向前看”,用前面的有效值延续下来。 例如,如果某列数据是[1, NaN, 3],前向填充后会变为[1, 1, 3]。
  • 后向填充(bfill):df.fillna(method=‘bfill’) 会使用当前缺失值的后一个非缺失值来填充该缺失值。可以理解为
    “向后看”,用后面出现的有效值往前补充。 例如,如果某列数据是[1, NaN, 3],后向填充后会变为[1, 3, 3]。
    这两种方法适用于有连续性的数据(如时间序列),能保留数据的趋势性,但如果缺失值位于开头(前向填充)或结尾(后向填充),则可能无法被填充。
1.2 处理重复数据

重复数据是指数据集中存在完全相同的记录。重复数据可能会导致数据分析结果的偏差,因此在数据清洗过程中需要特别注意。Pandas提供了duplicated()drop_duplicates()函数来检测和删除重复数据。

1.2.1 检测重复数据

使用duplicated()函数可以检测数据集中是否存在重复的记录。该函数返回一个布尔值的Series,其中True表示该行是重复的,False表示该行是唯一的。

import pandas as pd# 创建一个包含重复数据的示例数据集
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Alice'],'Age': [25, 30, 35, 40, 25],'Salary': [50000, 60000, 70000, 80000, 50000]}
df = pd.DataFrame(data)# 检测重复数据
duplicates = df.duplicated()
print(duplicates)
1.2.2 删除重复数据

使用drop_duplicates()函数可以删除数据集中的重复记录。该函数默认保留第一次出现的记录,删除后续的重复记录。

import pandas as pd# 创建一个包含重复数据的示例数据集
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Alice'],'Age': [25, 30, 35, 40, 25],'Salary': [50000, 60000, 70000, 80000, 50000]}
df = pd.DataFrame(data)
# 删除重复数据
df_unique = df.drop_duplicates()
print(df_unique)# 保留最后一次出现的记录
df_unique_last = df.drop_duplicates(keep='last')
print(df_unique_last)
1.3 处理异常值

异常值是指数据集中明显偏离其他值的数据点。异常值可能是由于数据收集过程中的错误或极端情况导致的。处理异常值的方法包括删除异常值、替换异常值等。Pandas提供了多种方法来检测和处理异常值。

1.3.1 检测异常值

检测异常值的方法有很多,常见的方法包括使用统计学方法(如标准差、四分位数等)和可视化方法(如箱线图)。Pandas中的describe()函数可以用来获取数据集的基本统计信息,帮助初步判断是否存在异常值。

import pandas as pd
# 创建一个包含异常值的示例数据集
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],'Age': [25, 30, 35, 40, 100],'Salary': [50000, 60000, 70000, 80000, 1000000]}
df = pd.DataFrame(data)# 获取数据集的基本统计信息
stats = df.describe()
print(stats)
##### 1.3.2 删除异常值
如果确定某些数据点是异常值,可以考虑删除这些异常值。Pandas中的布尔索引可以用来筛选出正常的数据点。
import pandas as pd
# 创建一个包含异常值的示例数据集
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],'Age': [25, 30, 35, 40, 100],'Salary': [50000, 60000, 70000, 80000, 1000000]}
df = pd.DataFrame(data)
# 删除年龄大于60的异常值
df_cleaned = df[df['Age'] <= 60]
print(df_cleaned)# 删除薪水大于500000的异常值
df_cleaned_salary = df[df['Salary'] <= 500000]
print(df_cleaned_salary)
1.3.3 替换异常值

在某些情况下,删除异常值可能会导致数据集的样本量减少,影响分析结果的准确性。此时,可以考虑使用替换的方法来处理异常值。常见的替换方法包括使用中位数、平均值等。

import pandas as pd
# 创建一个包含异常值的示例数据集
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],'Age': [25, 30, 35, 40, 100],'Salary': [50000, 60000, 70000, 80000, 1000000]}
df = pd.DataFrame(data)
# 使用中位数替换年龄大于60的异常值
median_age = df['Age'].median()
df['Age'] = df['Age'].apply(lambda x: median_age if x > 60 else x)
print(df)# 使用平均值替换薪水大于500000的异常值
mean_salary = df['Salary'].mean()
df['Salary'] = df['Salary'].apply(lambda x: mean_salary if x > 500000 else x)
print(df)

通过本课程的学习,学员将掌握使用Pandas库处理数据集中缺失值、重复数据和异常值的方法,确保数据的质量,为后续的数据分析和机器学习任务打下坚实的基础。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python爬虫实战:研究ScrapyRT框架,构建图书商城数据采集系统

1. 引言 1.1 研究背景 在当今数字化时代,互联网已成为全球最大的信息库,蕴含着海量的有价值数据,涵盖商业、教育、科研、医疗等各个领域。根据 IDC(国际数据公司)预测,到 2025 年全球数据圈将增长至 175ZB,其中网络数据占比超过 60%。这些数据不仅是企业制定商业策略、…

springboot接口请求参数校验

参数校验 参数校验可以防止无效或错误的数据进入系统。通过校验前端输入的参数&#xff0c;可以确保数据的完整性&#xff0c;避免因为缺少必要的信息而导致程序错误或异常。例如&#xff0c;对于密码字段&#xff0c;可以通过校验规则要求用户输入至少8个字符、包含字母和数字…

Docker部署 Neo4j 及集成 APOC 插件:安装与配置完整指南(docker-compose)

Docker部署 Neo4j 及集成 APOC 插件&#xff1a;分步骤指南 摘要 &#xff1a;本文将分两部分详细介绍相关内容。第一部分讲解如何使用 Docker Compose 部署 Neo4j 图数据库&#xff0c;提供完整配置文件及常见问题解决方案&#xff1b;第二部分在前者基础上&#xff0c;介绍 A…

TLSv1.2协议与TCP/UDP协议传输数据内容差异

一、Wireshark中常见的TLSv1.2在用Wireshark抓包时&#xff0c;除了看到课堂上教过的经典的TCP/UDP协议&#xff0c;还有一个协议经常出现——TLSv1.2。并且这个协议的Info解释是Application data&#xff0c;其实看到这个解释&#xff0c;我大概猜出来了TLSv1.2是用来给用户数…

51c自动驾驶~合集14

自己的原文哦~ https://blog.51cto.com/whaosoft/11707335 #Text2LiDAR 文本引导的无条件点云生成新SOTA 论文题目&#xff1a;《Text2LiDAR: Text-guided LiDAR Point Cloud Generation via Equirectangular Transformer》 论文地址&#xff1a;https://arxiv.o…

k8s基本概念

k8s 的基本概念 Kubernetes是一个可以移植、可扩展的开源平台&#xff0c;使用 声明式的配置 并依据配置信息自动地执行容器化应用程序的管理。在所有的容器编排工具中&#xff08;类似的还有 docker swarm / mesos等&#xff09;&#xff0c;Kubernetes的生态系统更大、增长更…

Easysearch 数据迁移之数据比对

上一篇我们通过 INFINI Gateway 进行了索引数据迁移&#xff0c;对索引迁移结果进行了初步且直观的校验--对比索引的文档数是否一致。今天介绍个实实在在的数据比对方法&#xff0c;通过网关对比索引文档的内容在两个集群是否一致。话不多说&#xff0c;就拿上次迁移的两个索引…

Codeforces Round 1042 (Div. 3)

ABCD 略E注意到每个操作最多执行一次&#xff0c;ifa[i]!b[i]&#xff0c;要么a[i]^a[i1]要么a[i]^b[i1]G设消除1~i的数的操作次数为f[i]&#xff0c;可以推出f[i]2*f[i-1]1&#xff0c;那么消除1~i的数的分数乘的数为g[i]&#xff0c;g[i]g[i-1]*g[i-1]*i s虽然很大&#xff0…

AJAX:让你的网页“静悄悄”变聪明,体验丝滑升级

大家好&#xff0c;今天想聊聊一个让网页“活”起来的小秘密——AJAX。你可能遇到过这种情况&#xff1a;点个按钮&#xff0c;页面就刷新&#xff0c;等得心急火燎。但用了AJAX的网站&#xff0c;比如购物车更新或搜索建议&#xff0c;数据嗖嗖就来了&#xff0c;整个页面却纹…

【iOS】Block基础知识和底层探索

文章目录前言Block的声明和创建问题引入Block的底层结构Block的执行流程Block的创建与存储Block的传递与调用Block的捕获机制捕获局部变量捕获全局变量小结Block的类型__block修饰符__block变量的包装结构体block的实例结构体block的执行逻辑Block循环引用造成的原因解决方法小…

1.Ansible 自动化介绍

1-Ansible 自动化介绍 Ansible 自动化介绍 手动执行任务和自动化执行任务 手动执行任务的麻烦事&#xff1a; 很容易漏掉某个步骤&#xff0c;或者不小心执行错步骤&#xff0c;而且很难验证每个步骤是不是真的按预期完成了。管理一大堆服务器时&#xff0c;很容易出现配置…

2025年云手机场景适配的行业观察

2025年的市场中&#xff0c;云手机品牌百花齐放&#xff0c;不同品牌在性能、功能和场景适配性上的差异日益显著。随着云计算技术的快速发展&#xff0c;云手机已从 尝鲜工具 演变为游戏、办公、企业运营等场景的刚需工具。现市面上也有着更多的云手机品牌&#xff0c;结合实测…

Date/Calendar/DateFormat/LocalDate

作用说明Date用于定义时间&#xff0c;提供date对象间的比较方法Calendar(日历类),提供对时间的运算方法DateFormat是接口&#xff0c;它的实现类SimpleDateFormat用来规范时间输出形式LocalDate&#xff0c;在JDK1.8之后引入&#xff0c;方便了对时间的运算方法介绍Date常用方…

在Python 3.8环境中安装Python 3.6兼容包的方法

在Python 3.8环境中安装Python 3.6兼容包的方法 用户的需求是&#xff1a;在Python 3.8环境中重新安装原本为Python 3.6设计的包。这通常涉及兼容性问题&#xff0c;因为Python 3.8可能引入了一些语法或API变更&#xff0c;导致旧包无法直接运行。以下是逐步解决方案&#xff…

三种DuckDB电子表格插件的union all查询性能对比

我选取了最稳定、兼容性最好的三种&#xff1a;官方excel对应函数read_xlsx()、官方spatial对应函数st_read()、rusty_sheet对应函数read_sheet。 1.建立两个包含前50万和后54万的xlsx文件&#xff0c;用于比较。利用官方excel的copy()to进行。 D copy (from v1 order by l_ord…

Python 中使用多进程编程的“三两”问题

文章目录一、简介二、选择合适的启动方式三、手动终止所有的进程小结一、简介 这里简单介绍在Python中使用多进程编程的时候容易遇到的情况和解决办法&#xff0c;有助于排查和规避某类问题&#xff0c;但是具体问题还是需要具体分析&#xff0c;后续会补充更多的内容。 二、…

Ansible部署应用

目录Ansible概述1&#xff1a;什么是Ansible2&#xff1a;Ansible的架构组成3&#xff1a;Ansible与SaltStack的对比安装部署Ansible服务1&#xff1a;系统环境设置2&#xff1a;安装Ansible&#xff08;第一台&#xff09;2&#xff1a;配置主机清单3&#xff1a;修改Ansible配…

疏老师-python训练营-Day44预训练模型

浙大疏锦行 知识点回顾&#xff1a; 预训练的概念常见的分类预训练模型图像预训练模型的发展史预训练的策略预训练代码实战&#xff1a;resnet18 作业&#xff1a; 尝试在cifar10对比如下其他的预训练模型&#xff0c;观察差异&#xff0c;尽可能和他人选择的不同尝试通过ctrl进…

AI入门学习--如何写好prompt?

写好Prompt&#xff08;提示词&#xff09;是驾驭AI模型的核心技能。以下是结合测试工程师需求的 结构化方法论 和 黄金模板一、prompt设计金字塔终极心法&#xff1a; Prompt 对AI的测试需求文档&#xff0c;需像设计测试用例一样&#xff1a;可执行&#xff1a;明确输入输出…

Linux编程 IO(标准io,文件io,目录io)

标准IO C语言标准IO概述标准IO&#xff08;Standard Input/Output&#xff09;是C语言中用于处理文件和数据流的一组函数库&#xff0c;定义在<stdio.h>头文件中。与低级IO&#xff08;如read/write&#xff09;相比&#xff0c;标准IO提供了缓冲机制&#xff0c;提高了数…