人工智能数据集处理——数据清理1

news2025/1/11 23:44:33

目录

一、概述

二、缺失值

1、检测缺失值

使用isna() 方法检测na_df中是否存在缺失值

使用natna() 方法

2、缺失值的处理

(1) 删除缺失值

使用删除dropna() 方法删除na_df 对象中缺失值所在的一行数据

删除全为缺失值的行

删除有缺失值的行

(2) 填充缺失值

使用fillna()方法将na_df对象中的缺失值填充为缺失值所在列的平均值

(3) 插补缺失值

使用interpolate()方法结合线性插值法对na_df对象中的缺失值进行插补

三、重复值

1、重复值的检测

使用duplicate() 方法检测重复值

2、重复值的处理

使用drop_duplicates()方法  删除重复值,只保留person_into对象中第一出现的重复值


一、概述


在数据清洗过程中,主要处理的是缺失值、异常值和重复值。
所谓清洗,是对数据集通过丢弃、填充、替换、去重等操作。达到去除异常、纠正错误、补足缺失的目的。
 

二、缺失值

1、检测缺失值

检测缺失值的常用方法有 :isnull() , notnull() , isna() , notna()
import pandas as pd
import numpy as np

na_df = pd.DataFrame({'A': [1, 2, np.NaN, 4],
                      'B': [3, 4, 4, 5],
                      'C': [5, 6, 7, 8],
                      'D': [7, 5, np.NaN, np.NaN]})
print(na_df)

使用isna() 方法检测na_df中是否存在缺失值

print('isna()方法 Ture对应着NaN所在的值')
print(na_df.isna())

使用natna() 方法

print('notna() 方法 缺失值返回False')
print(na_df.notna())

2、缺失值的处理

(1) 删除缺失值

pandas 中删除缺失值的方法dropna()

dropna()方法的语法格式
data.Frame.dropna(axis=0,how='any',thresh=None,subset=None,inplace=False)

axis:维度,axis=0表示index行,axis=1表示columns列,默认为0
how:"all"表示这一行或列中的元素全部缺失(为nan)才删除这一行或列,"any"表示这一行或列中只要有元素缺失,就删除这一行或列
thresh:保留至少出现了N个非NaN值的行或列。
subset:删除指定列的缺失值
inplace:刷选过缺失值得新数据是存为副本还是直接在原数据上进行修改。

使用删除dropna() 方法删除na_df 对象中缺失值所在的一行数据

# 默认为删除行,只要有空值就会删除,不替换
print('删除有空值的行\n',na_df.dropna())

# 保留至少3个非NaN值的行
print('保留至少3个非NaN值的行\n',na_df.dropna(thresh=3))

删除全为缺失值的行

print('删除全为缺失值的行\n',na_df.dropna(how='all'))

删除有缺失值的行

print('删除有缺失值的行\n',na_df.dropna(how='any'))

(2) 填充缺失值

填充缺失值的方法fillna()

函数形式: fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None) 

value:用于填充的空值的值。
method: {'backfill', 'bfill', 'pad', 'ffill', None}, default None。定义了填充空值的方法,pad / ffill表示用前面行/列的值,填充当前行/列的空值, backfill / bfill表示用后面行/列的值,填充当前行/列的空值。
axis:轴。0或'index',表示按行删除;1或'columns',表示按列删除。
inplace:是否原地替换。布尔值,默认为False。如果为True,则在原DataFrame上进行操作,返回值为None。
limit:连续填充的最大数量
downcast:dict, default is None,字典中的项为,为类型向下转换规则。或者为字符串“infer”,此时会在合适的等价类型之间进行向下转换,比如float64 to int64 if possible。

使用fillna()方法将na_df对象中的缺失值填充为缺失值所在列的平均值

# 计算A列的平均数,并保留一位小数
col_a = np.around(np.mean(na_df['A']),1)
# 计算D列的平均数,并保留一位小数
col_d =np.around(np.mean(na_df['B']),1)
# 将计算的平均值填充到指定的列
print('缺失值填充为缺失值所在列的平均值\n',na_df.fillna({'A':col_a,'D':col_d}))

print('缺失值填充为缺失值前面的值\n',na_df.fillna(method='ffill'))

(3) 插补缺失值

插补缺失值的方法 interpolate()

DataFrame.interpolate(method='linear',axis=0,limit=None,inplase=False,limit_direction=None,limit_area=None,**kwargs) """


1、method:表示使用的插值方法。    该参数支持 'linear'( 默认值 )、'time'、'index'、'values'、 'nearest'、'barycentric'共 6 种取值,
    其中 'linear'代表采用线性插值法进行填充;'time代表根据时间长短进行填充,适用于索引为日期时间的对象;'index'和'values'代表采用索引的实际数值进行填充;'nearest'代表采用最邻近插值法进行填充;'barycentric'代表采用重心坐标插值法进行填充。
2、limit:表示连续填充的最大数量。
3、limit_direction:表示按照指定方向对连续的 NaN 值进行填充。该参数常用的取值为"forward'、'backforward' 和 'both',其中' forward'代表向前填充;'backforward'代表向后填充:'both'代表同时向前、向后填充。

使用interpolate()方法结合线性插值法对na_df对象中的缺失值进行插补

print('\n使用interpolate()方法结合线性插值法对缺失值进行插补\n',na_df.interpolate(method='linear'))

三、重复值

import pandas as pd

person_info=pd.DataFrame({'name':['刘婷婷','小王','彭岩','刘华','刘华','周华'],
                          'age':[24,23,29,22,22,27],
                          'height':[162,165,175,175,175,178],
                          'gender':['女','女','男','男','男','男']})
print(person_info)

1、重复值的检测

duplicated()方法

DataFrame.dulicated(subset=None,keep='first')

subset  表示采用重复项的列索引或列索引的序列,默认标识所有的列索引
keep   表示哪种方式保留重复项。  ‘first’(默认值)删除重复值,只留第一个,  ‘last’ 只留最后  ,‘False’ 重复项全删

使用duplicate() 方法检测重复值

print('检测重复值\n',person_info.duplicated())

2、重复值的处理

drop_duplicates()方法

DataFrame.dulicated(subset=None,keep='first',inplace=False,ignore_index=False)

subset 同上
keep  同上
ignore_index  表示是否对删除重复值后的对象的行索引重新排序,默认为False

使用drop_duplicates()方法  删除重复值,只保留person_into对象中第一出现的重复值

print('删除重复值,只保留第一出现的重复值\n',person_info.drop_duplicates())

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

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

相关文章

win10 下搭建hadoop(成功截图)

背景: 搭建hadoop是大数据的启蒙第一步,对初学者有很好的信心建设,建议安装版本和作者一样。话不多说,开始正文。 1. 下载hadoop 本文版本为3.0.0 可以Apache.org官网下载,也可以本人csdn资源处下载https://download.…

数据结构之静态链表

定义 用两个数组实现链表,一个数组存储数据,另一个数组记录当前数据的后继的下标。 示例 数据:data[] {-1, 34, 28, 53, 16, 25, -1, -1, -1, -1} 后继:next[] { 1, 2, 3, 4, 5, -1, -1, -1, -1, -1} 说明 -1: 表示无效值 …

Linux2.基础指令(下)

1.uname -r :输出Linux内核版本信息。 2.linux2.6.*内核默认支持的文件系统有ext3,ext2,ext4,xfs,不支持ufs。 3.linux查看CPU占用的命令:top。 4.题目 5.题目 6.题目 7.重定向 echo "字符串1" :在屏幕上打印字符串1。 echo "字符串1" &g…

C语言督学营(初级阶段)

文章目录 初级阶段1.编程环境搭建、调试C的历史故事写代码快速提升的方法快捷键编程环境 Clion、断点调试(单步调试) 2.数据类型、标准输入输出数据分类printf整型进制转换内存视图ASCII码表计算器 scanf的原理 3.运算符与表达式C语言的13种运算符运算符优先级 4.选择、循环1.选…

【每日算法 数据结构(C++)】—— 01 | 平方值去重统计(解题思路STL法,双指针法、流程图、代码片段)

文章目录 01 | 👑 题目描述02 | 🔋 解题思路STL法双指针法 03 | 🧢 代码片段STL法双指针法 “Success is not final, failure is not fatal: It is the courage to continue that counts.” - Winston Churchill (成功并非终点&am…

Redis【Redis数据类型(String、List、Set、Hash 、Zset)】(二)-全面详解(学习总结---从入门到深化)

目录 Redis数据类型_String set get append strlen setex setnx getrange setrange incr decr incrby/decrby key step mset mget getset Redis数据类型_List lrange lpop/rpop lindex llen lrem linsert lset Redis数据类型_Set smembers sism…

如何在 JavaScript 中处理 HTML 事件?

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言什么是HTML事件Jav…

基于多进程并发-进程通讯之共享内存(shared memmory)

一、什么是共享内存 操作系统对进程内存实现原理: 现代操作系统,对于内存管理,采⽤的是虚拟内存技术,也就是每个进程都有⾃⼰独⽴的虚拟内存空间,不同进程的虚拟内存映射到不同的物理内存中。所以,即使进程…

Python交互式模式的特点和用法

Python交互式(Interactive Mode)是一种Python语言的工作模式,与传统的编写、保存、运行的方式不同,它允许用户直接在控制台窗口中输入和执行Python代码。 Python交互式的特点包括: 实时性:每输入一条语句&a…

黑马程序员前端 Vue3 小兔鲜电商项目——(八)登录页面

文章目录 账号密码路由配置模版代码配置路由跳转 表单校验实现校验要求代码实现统一校验 登录基础业务实现统一错误信息提示Pinia 管理用户数据Pinia 用户数据持久化用户登录状态请求拦截器携带 token退出登录实现Token 失效拦截处理 登录页面的主要功能就是表单校验和登录登出…

【Redis 基础及在 Java 中的应用】

文章目录 Redis 基础及在 Java 中的应用1 Redis 入门1.1 Redis 简介1.2 Redis 下载与安装1.3 Redis服务启动与停止 2 数据类型2.1 介绍2.2 五种常用数据类型 3 常用命令3.1 字符串 string 操作命令3.2 哈希 hash 操作命令3.3 列表 list 操作命令3.4 集合 set 操作命令3.5 有序集…

软件SPI读写W25Q64硬件SPI读写W25Q64

目录 软件SPI读写W25Q64 MySPI W25Q64 主函数 硬件SPI读写W25Q64 软件SPI读写W25Q64 程序整体框架: SPI模块包含通信引脚封装,初始化,SPI三个基本时序单元(起始,终止,交换一个字节) W2…

matlab实现语音信号的频域分析及应用

1.语音信号本质上是非平稳信号。但我们可以假设语音信号在一个短时间内是平稳的,这样我们用稳态分析方法处理非平稳信号。应用在傅立叶分析就是短时傅立叶变换。 语音的频域分析:包括语音信号的频谱、功率谱、倒频谱、频谱包络等. 常用频域分析方法&am…

排序算法之堆排序_20230624

排序算法之堆排序 前言 堆排序是基于比较排序的一类算法,算法重复利用堆(Binary heap)的特性,最大(最小)元素一定位于堆顶的位置,那么就可以提取堆顶元素,放置在数组的尾部位置,后再把剩余的元…

设计模式之状态模式笔记

设计模式之状态模式笔记 说明State(状态)目录状态模式示例类图抽象状态类环境角色类电梯开启状态类电梯关闭状态类电梯运行状态类电梯停止状态类测试类 说明 记录下学习设计模式-状态模式的写法。JDK使用版本为1.8版本。 State(状态) 意图:允许一个对象在其内部状态改变时改…

从零搭建一台基于ROS的自动驾驶车-----4.定位

系列文章目录 北科天绘 16线3维激光雷达开发教程 基于Rplidar二维雷达使用Hector_SLAM算法在ROS中建图 Nvidia Jetson Nano学习笔记–串口通信 Nvidia Jetson Nano学习笔记–使用C语言实现GPIO 输入输出 Autolabor ROS机器人教程 从零搭建一台基于ROS的自动驾驶车-----1.整体介…

【Leetcode60天带刷】day25回溯算法——216.组合总和III,17.电话号码的字母组合

​ 题目: 216. 组合总和 III 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 示例 1…

读书笔记--数据治理之术

继延续上一篇文章,对数据治理之术进行学习思考,这部分内容是本书整体内容的核心细节,内容比较多比较杂,通读了好长时间才动手总结整理,因此更新的慢了一些。数据治理之术是操作层面的技术或方法,数据治理相…

linux系统如何添加硬盘设备

前言: 今天记录一下硬盘方面的知识,主要讲一下分区、挂载方面的知识,心情太郁闷了,假期的最后一天。 1、硬盘的命名规则 现在的硬盘设备一般都会以“/dev/sd”开头,而一台主机上可以有多块硬盘设备,因此系…

6.24全球央行鹰派立场重现,下周黄金是否会继续下跌?

近期有哪些消息面影响黄金走势?下周黄金多空该如何研判? ​黄金消息面解析:周五(6月23日)美市尾盘,现货黄金收报1920.44美元/盎司,上升6.58美元或0.34%,日内最高触及1937.46美元/盎…