用Pandas做数据清洗的常用操作!

2023-10-29

大家好,我是小z

今天给大家分享一篇pandas数据清洗的干货

作为一名数据分析师,每天都在完成各种数据分析需求,其中数据清洗是必不可少的一个步骤。一般而言,当提及数据清洗时,其实是主要包括了缺失值处理、重复值处理和异常值处理三类操作,本文即围绕这这三个方面介绍一下个人的一些习惯操作

01 缺失值处理

缺失值是各类数据集中经常会遇到的情形,相较于工整完全的数据记录,带有一定的缺失值更接近于数据的真实原貌。一般而言,缺失值处理的原则无非就是以下三种:

  • 缺失比例较小,可直接过滤掉缺失值所在行

  • 缺失比例较大,根据特定的业务理解进行一定规则的填充

  • 缺失记录有特定业务含义,不做任何处理

至于在实际数据分析中应该采取哪种方案来处理,这个要结合具体的数据分析场景和业务需求,不可一概而论。所以,这里仅给出基于Pandas的具体处理方法。

1. 过滤掉缺失值所在行
在过滤之前,首先要分析缺失比例的大小,其基础在于判断各个值是否为空,pandas提供了4个相关API,包括

  • isna(), isnull(),二者等价

  • notna(), notnull(),二者等价

这四个函数用法也非常显然了,前两个用于判断各元素是否为空,后两个则用于判断各元素是否非空。4个函数返回值元素类型均为Boolean值,所以可进一步嵌套一层mean()函数直接计算缺失比例。例如:

在完成缺失值比例分析的基础上,断定可以直接过滤掉缺失值,那么仅需执行如下操作即可:

2. 对缺失值进行填充

有些情况下,对缺失值直接进行过滤会导致样本分布受到影响。同时基于特定的业务理解,可以采取一定的规则进行填充,一般而言填充的方式包括两大类:特定值和特定规则。缺失值的填充API主要是用fillna(),当然也可手动用缺失值筛选+赋值的形式完成这一操作。

  • 特定值填充。特定值填充一般是对缺失的位置填充某种特定值,当然这里的特定值一般又可细分为3种情况:常数,均值,众数,其中均值填充主要适用于取值连续的情形,而众数填充则适用于取值离散的情形,常数值填充则是基于特定的业务含义。举个例子:

  • 特定规则填充。在某些不适合利用常数值填充的情况下时,基于特定场景可基于特定规则填充,例如得到疫情期间各地累计感染人数,当某地某天的感染人数最新数字缺失时,我们可以用其前一天的感染人数填充。这实际上就是前向填充,类似地还有后向填充。再比如,获取一天各时刻的温度值,当某一时刻温度数据缺失时,那么实际上可基于前后记录拟合插值的方式填充。

02 重复值处理

与缺失值一样,重复值也是数据分析中经常遇到的一种情形,一般是由于样本重复记录或重复读取造成。当然,根据特定的分析场景和业务需求,对于重复值的处理实际上也包含两种情况:

  • 对重复值进行过滤

  • 重复值存在合理性,不做处理

这里仅给出需过滤重复值时的处理方法。既然要过滤掉重复值,那么首先要判断哪些是重复值,pandas中提供接口为duplicated(),具体如下:

类似地,执行重复值过滤的接口为drop_duplicates(),仍然可选keep参数保留不同不同的重复记录:

另外,在某些情况下不需要针对所有列进行重复值判断,而是仅在特定几列范围内展开去重,此时drop_duplicates还可选一个参数subset,接收列名序列。

03 异常值处理

不同于缺失值和重复值那样规则相对明朗,异常值的处理相对更为复杂。首先要基于业务理解出什么情况下算作是异常值,其次还要指定异常值的处理规则,要么是对异常值所在记录进行过滤,要么是按照一定的规则进行转换,使得异常值变为"正常值"。

就个人目前所应用到数据处理而言,常用的异常值判断规则包括如下几类:

  • 基于数值范围,对于取值连续的情形,可判断数值的绝对大小是否在合理范围,分布是否在箱线图之间,例如车速的大小一般可用[0, 120]作为合理区间进行判断;对于取值离散的情形,可判断取值是否在指定的候选集之间,例如性别的取值范围可能包括男、女和未知三种。

  • 基于特定业务含义,例如每条记录中的两个字段对应了明确的大小或先后关系,当不满足这一关系时可判断为异常值。例如城市抓拍过车记录中,对于一条包括出发时间和到达时间的车辆行驶记录,当到达时间小于等于出发时间时,或者到达时间与出发时间的时间差小于某个阈值时,都可以认为是异常记录

  • 基于特定业务含义,单条记录并无异常,但放在整个数据集中则是异常记录。例如仍以城市抓拍车辆出行为例,虽然从单条记录来看并无异常之处,但对于整个数据集来看,某车牌号在全天仅出现1次,那么相较于该车牌号确实仅出现1次而言,认为该记录中的车牌号识别错误的可能性更为合理,因为该条记录也应认为是异常记录。

这里以某真实GPS数据集为例,原始数据集如下:

以上述三种异常值的清洗需求为例,其执行流程分别如下:

1. 清洗单字段取值异常的记录

以速度字段为例,首先判断其取值分布情况:

绘图接口:seaborn.boxenplot()

显然,无论是从箱线图来看,还是从绝对取值来看,都有一部分速度值异常的记录,为了过滤掉这些记录,可直接用query()实现,query的具体用法可参考历史文章Pandas用了一年,这3个函数是我的最爱……

2. 根据记录内部条件过滤异常值

这里,我们暂时脱离GPS数据中的具体含义,假设给定规则为run_status≥status,否则视为异常记录,那么执行这一过程的方法为:

更一般地,要求run_status-status>=1,则可用如下方法实现:

3. 基于整个数据集进行整体判断

在以上数据集中,假定device_no对应了唯一GPS终端信息,现在要求各终端在整个数据集中要求至少出现10次,否则认为其为异常记录,例如某device_no在整个数据集中仅出现了9次,那么认为这9条记录均为异常记录而需要清洗。实现方法也有很多,但借助groupby+transform可轻松实现这一清洗过程:

可以从一份超市数据集中分析出啥?

10大Python数据可视化库!

后台回复“入群”即可加入小z数据干货交流群
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用Pandas做数据清洗的常用操作! 的相关文章

  • 如何替换 Pandas Dataframe 中不在列表中的所有值? [复制]

    这个问题在这里已经有答案了 我有一个值列表 如何替换 Dataframe 列中不在给定值列表中的所有值 例如 gt gt gt df pd DataFrame D ND D garbage columns S gt gt gt df S 0
  • Python 类型提示 Dict 语法错误 可变默认值是不允许的。使用“默认工厂”

    我不知道为什么解释器会抱怨这个类型的字典 对于这两个实例 我得到一个 不允许可变默认值 使用默认工厂 语法错误 我使用的是 python 3 7 3 from dataclasses import dataclass from typing
  • 如何在 Matplotlib 饼图周围绘制箭头以将每个标签指向圆圈中各自的部分?

    我一直在用 Matplotlib 绘制一些图表 我有一个饼图 想要在图表周围绘制箭头 使每个标签都指向图表 我有一个例子 这是我当前的代码 import matplotlib pyplot as plt plt rcParams font
  • NLTK 2.0分类器批量分类器方法

    当我运行此代码时 它会抛出一个错误 我认为这是由于 NLTK 3 0 中不存在batch classify 方法 我很好奇如何解决旧版本中的某些内容在新版本中消失的此类问题 def accuracy classifier gold resu
  • 使用主题交换运行多个 Celery 任务

    我正在用 Celery 替换一些自制代码 但很难复制当前的行为 我期望的行为如下 创建新用户时 应向tasks与交换user created路由键 该消息应该触发两个 Celery 任务 即send user activate email
  • 在 Django Admin 中调整字段大小

    在管理上添加或编辑条目时 Django 倾向于填充水平空间 但在某些情况下 当编辑 8 个字符宽的日期字段或 6 或 8 个字符的 CharField 时 这确实是一种空间浪费 字符宽 然后编辑框最多可容纳 15 或 20 个字符 我如何告
  • Python 3d 绘图设置固定色阶

    我正在尝试绘制两个 3d 数组 第一个数组的 z 值在范围内 0 15 0 15 第二个来自 0 001 0 001 当我绘图时 色标自动遵循数据范围 如何设置自定义比例 我不想看到 0 001 的浅色 而应该看到 0 15 的浅色 如何修
  • 为什么 web2py 在启动时崩溃?

    我正在尝试让 web2py 在 Ubuntu 机器上运行 所有文档似乎都表明要在 nix 系统上运行它 您需要下载源代码并执行以下操作 蟒蛇 web2py py 我抓住了source http www web2py com examples
  • 更好地相当于这个疯狂的嵌套 python for 循环

    for a in map for b in map a for c in map b for d in map c for e in map d print a b c d e 上面的代码用于创建图中一定长度的所有路径 map a 表示从
  • PyQt 使用 ctrl+Enter 触发按钮

    我正在尝试在我的应用程序中触发 确定 按钮 我当前尝试的代码是这样的 self okPushButton setShortcut ctrl Enter 然而 它不起作用 这是有道理的 我尝试查找一些按键序列here http ftp ics
  • GUI(输入和输出矩阵)?

    我需要创建一个 GUI 将数据输入到矩阵或表格中并读取此表单数据 完美的解决方案是限制输入表单仅允许float 例如 A 1 02 0 25 0 30 0 515 0 41 1 13 0 15 1 555 0 25 0 14 1 21 2
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 如何将 ascii 值列表转换为 python 中的字符串?

    我在 Python 程序中有一个列表 其中包含一系列数字 这些数字本身就是 ASCII 值 如何将其转换为可以在屏幕上回显的 常规 字符串 您可能正在寻找 chr gt gt gt L 104 101 108 108 111 44 32 1
  • Python - 如何确定解析的 XML 元素的层次结构级别?

    我正在尝试使用 Python 解析 XML 文件中具有特定标记的元素并生成输出 excel 文档 该文档将包含元素并保留其层次结构 我的问题是我无法弄清楚每个元素 解析器在其上迭代 的嵌套深度 XML 示例摘录 3 个元素 它们可以任意嵌套
  • Django REST Framework - CurrentUserDefault 使用

    我正在尝试使用CurrentUserDefault一个序列化器的类 user serializers HiddenField default serializers CurrentUserDefault 文档说 为了使用它 请求 必须作为
  • python 中的“槽包装器”是什么?

    object dict 和其他地方的隐藏方法设置为这样的
  • 如何以正确的方式为独立的Python应用程序制作setup.py?

    我读过几个类似的主题 但还没有成功 我觉得我错过或误解了一些基本的事情 这就是我失败的原因 我有一个用 python 编写的 应用程序 我想在标准 setup py 的帮助下进行部署 由于功能复杂 它由不同的 python 模块组成 但单独
  • 等待子进程使用 os.system

    我用了很多os system在 for 循环内调用创建后台进程 如何等待所有后台进程结束 os wait告诉我没有子进程 ps 我使用的是Solaris 这是我的代码 usr bin python import subprocess imp
  • 如何在 Flask 中的视图函数/会话之间传递复杂对象

    我正在编写一个 Web 应用程序 当 且仅当 用户登录时 该应用程序从第三方服务器接收大量数据 这些数据被解析为自定义对象并存储在list 现在 用户在应用程序中使用这些数据 调用不同的视图 例如发送不同的请求 我不确定什么是最好的模式在视
  • 如何将Python3设置为Mac上的默认Python版本?

    有没有办法将 Python 3 8 3 设置为 macOS Catalina 版本 10 15 2 上的默认 Python 版本 我已经完成的步骤 看看它安装在哪里 ls l usr local bin python 我得到的输出是这样的

随机推荐

  • Windows 7 下 vs2010内存泄漏检测工具VLD的使用

    1 环境和软件 Windows7 32位系统 Visual Studio 2012 旗舰版 vld 2 2 3 setup exe 大小1 04M 2 步骤 1 下载安装 下载好 vld 2 2 3 setup exe 大小1 04M 并安
  • CentOS 7.9 使用rpm包安装MySQL-5.7.43

    参考 refman 5 7 pdf 2 5 5 Installing MySQL on Linux Using RPM Packages from Oracle 前期准备 1 防火墙端口检查与设置 检查防火墙状态 systemctl sta
  • 买服务器做网站 镜像选什么,云服务器做网站镜像类型选啥

    云服务器做网站镜像类型选啥 内容精选 换一换 创建一台或多台云服务器 V1 1版本创建云服务器的接口兼容了V1版本创建云服务器 按需 的功能 同时合入新功能 支持创建包年 包月的弹性云服务器 本接口为异步接口 当前创建云服务器请求下发成功后
  • 【Golang

    环境准备 GoLang go1 15 7 windows amd64 Docker 1 13 1 MySQL 8 0 28 一 利用容器部署mysql 1 首先通过docker pull mysql拉取mysql镜像 root k8s ma
  • Jetty篇一之初识Jetty

    前言 最近公司项目中用到了Jetty来作为项目的web容器 借此机会来分享一下我的学习心得 在学习Jetty之前 一定要了解一些Jetty的基本概念以及优缺点 这样才方便做更深入的学习 现在让我来慢慢揭开它的神秘面纱吧 基础 什么是Jett
  • 大数据模型案例库-涵盖多行业,超百个实战项目案例

    平台目前积累了大量的人工智能应用模型 不仅包括多年来人工智能企业服务方面的沉淀 还包括大量其他企业的真实项目应用模型 以及高校智能工作室成果模型 覆盖教育 医疗 交通 金融 科技 农业等18个行业 平台面向高校 企业 个人等广大用户群体 所
  • Candence原理图误删图页并保存退出后的恢复方法

    一早打开Candence准备工作 发现原理图少了几页 心里很慌 昨晚在画PCB的时候设置按了几次Delete键 没有反应 可能删了原理图 关闭的时候也没有看 直接保存退出了 看了之前拷贝备份的文件 时间有点久 那只能靠软件的自动备份功能了
  • C语言进阶(九)—— 函数指针和回调函数、预处理、动态库和静态库的使用、递归函数

    1 函数指针 1 1 函数类型 通过什么来区分两个不同的函数 一个函数在编译时被分配一个入口地址 这个地址就称为函数的指针 函数名代表函数的入口地址 函数三要素 名称 参数 返回值 C语言中的函数有自己特定的类型 c语言中通过typedef
  • 学习笔记-选择排序

    选择排序 将一个一维数组从小到大排序 思路 选择排序的思路是 首先认为数组的第一个数是最小的 保留它然后遍历它后面的数 跟它作比较 选择出最小的数和位置 遍历结束后 让这个最小的数和数组的第一位数交换 这样确定了第一个最小的数 之后重复这个
  • Unity AR阴影投射透明地面 仅渲染模型实时阴影 Shader实现

    亲测可用 上面就是实现的效果 仅仅渲染阴影 地面透明 也可以换成AR中的虚拟物体 AR中为的虚拟物体添加阴影 只用unity的光照投影是没办法实现的 或者需求是 角色需要投射阴影在墙上 但是墙不能显示 只渲染出阴影 相当于接受阴影的地面墙体
  • 吊打 CLIP 平均10个点,Meta 多模态通用模型 FLAVA真香啊

    厉害了 作者将单一模型运用于三个不同领域的不同任务 结构简单且训练直观 还能有着出色的表现 自Transformer横空出世 从NLP到CV 再到今天的多模态 无数基于Transformer的模型被应用于各类任务 似乎真的印证了当年文章的标
  • ldd not a dynamic executable

    在开发环境编译运行很ok的程序 到了客户的生产环境一直有问题 编译找不到库 类似这个样子 usr bin ld skipping incompatible lib libasound so when searching for lasoun
  • EXCEL-VBA:Workbooks.Open 参数 (打开文件)

    打开一个工作簿 语法 表达式 Open FileName UpdateLinks ReadOnly Format Password WriteResPassword IgnoreReadOnlyRecommended Origin Deli
  • UE5导入倾斜摄影

    前言 虚幻引擎是全球最先进的实时3D创作工具 可制作照片级逼真的视觉效果和沉浸式体验 2022年4月5号虚幻引擎发布了颠覆性的UE5 倾斜摄影是城市实景的基础 通过无人机采集实际照片再进行三维重建 常见的数据格式为osgb 本文主要介绍UE
  • JSP自定义标签的(生命周期与开发if,foreach,out)

    自定义标签定义 是用户定义的JSP语言元素 扩展名为tld的文件 tag标签的配置文件 通常放在WEB INF下面 自定义标签的开发及使用步骤 思路 1 1 创建一个标签助手类 继承BodyTagSupport 标签属性必须助手类的属性对应
  • 测试自动化平台

    https mp weixin qq com s WU5h8FW6BT5YZtlsSuCIcw 摘要 随着近几年国内IT行业高速发展 对测试工程师的要求也越来越高 其作用也越来越重要 但很多测试工程师也迎来了个人发展的瓶颈 下一步该向哪个方
  • clock的accuracy(tolerance)和jitter

    对于clock来说 有两个参数来衡量质量 分别是jitter和accuracy tolerance Jitter的单位是ps Tolerance的单位是ppm 百万分之 在晶振 RTC和Oscillator中也会找到类似参数 SOC和MCU
  • Hexo标签插件的使用

    tag 插件 Tag Plugin 是 Hexo 提供的一种快速生成特定内容的方式 例如 在标准 Markdown 语法中 我们无法指定图片的大小 这种情景 我们即可使用标签来解决 Hexo 内置来许多标签来帮助写作者可以更快的书写 完整的
  • docker运行nginx为什么要使用 nginx -g 'daemon off;'

    1 docker容器跑着为啥会挂掉 docker 容器默认会把容器内部第一个进程 也就是pid 1的程序作为docker容器是否正在运行的依据 如果docker 容器pid挂了 那么docker容器便会直接退出 2 docker run的时
  • 用Pandas做数据清洗的常用操作!

    大家好 我是小z 今天给大家分享一篇pandas数据清洗的干货 作为一名数据分析师 每天都在完成各种数据分析需求 其中数据清洗是必不可少的一个步骤 一般而言 当提及数据清洗时 其实是主要包括了缺失值处理 重复值处理和异常值处理三类操作 本文