Pandas教程(三)—— 数据清洗与准备

1.处理缺失值

 1.1 数据删除函数

    作用:删除Dataframe某行或某列的数据 

    语法:df.drop( labels = [ ] )

drop函数的几个参数:

         labels =:接收一个列表,内含删除行 / 列的索引编号或索引名

         axis =:删除的轴向   0代表删除行;1代表删除列

         inplace =:是否改变原数组    默认False 即生成一个新数组

 1.2 缺失值的查看

方法

描述

df.isnull()返回一个布尔数组,是缺失值就显示True
df.notnull()返回一个布尔数组,是缺失值就显示False

 1.3 过滤缺失值 

     作用:删除缺失值所在的行 / 列

     语法:df.dropna( axis=0, how='any', thresh=None, subset=None, inplace=False )

dropna函数的几个参数:

         axis =:0代表删除包含缺失值的行;1代表删除包含缺失值的列

         how=:“any”代表删除有缺失值的行 / 列 ; “all”代表删除所有值均缺失的行 / 列

         thresh=:行 / 列中若达不到thresh个非缺失值,就删除

         subset=:输入一个含索引名称的list,代表对这些列的空值进行删除

 1.4 填充缺失值

     作用:将缺失值补全为指定的值

     语法:df.fillna(value, method=None, axis=None, inplace=False, limit=None)

fillna函数的几个参数:

         value:填充的值,也可输入一个字典(用于为不同的列设置不同的填充值)

         method:填充方法   “ffill”用前面的值填充    “bfill”用后面的值填充

         axis:修改填充的轴

         limt:最大填充数

2. 数据转换方法

 2.1 删除和提取重复值

   2.1.1 查看元素个数

  •  语法:df [ 列名 ] . value_counts()
  •  与count()函数的区别:前者是返回各个元素的个数,后者时返回该列中所有元素的总数

   2.1.2 删除重复值

  •  语法: df.drop_duplicates(subset=None, keep='first', inplace=False)

参数说明

        subset:输入一个list,用来要操作的列,默认是所有列

        keep:指定处理重复值的方法      

                   “first” 指保留第一次出现的值      “last” 指保留最后一次出现的值

                   “False” 不保留重复值,全部删除

   2.1.3 提取重复值

  •  语法:df [ df.duplicated(subset=None, keep='first') ] 
  •  原理:相当于运用了索引切片的操作,中括号内的函数用来判断是否为重复值 

   

 2.2 数据替换

   2.2.1 元素替换

  • 语法:df.replace(被替换的元素,替换元素)
  • 注意: 1)如果要一次替换多个不同的值,可以利用列表或者字典
  •             2)如果想仅对某列替换,先利用df [ ] 切片即可

   2.2.2 字符串替换 

  •  语法:df.str.replace(被替换的字符串,替换字符串)
  •  区别:它是对字符串进行按元素替代的,可以对字符串切片后进行替换操作

        例如:“山东省” 一> “山西省”,该方法就可直接替换“东” 一>“西”,这对于操作长数据非常方便

 2.3 离散化和分箱 

        连续值经常需要离散化,或者分离成“箱子”进行处理。即:分组

   2.3.1 指定分界点分箱

  •  语法:pd.cut  (x, bins, right=True, labels=None, precision=3, include_lowest=False)

参数说明:

         

          x:    待切割的一维数组或列表对象

          bins:   切割箱      若输入一个整数,则定义了x宽度范围内的等宽面元数量;

                                        若输入一个序列,则代表分界点

          right:   是否为左开右闭区间

          labels:   自定义箱子名称     传入数组或列表(与箱子等长)

          precision:  箱子精度            保留几位小数

          include_lowest:第一个区间的左端点是否包含            

       

 

   2.3.2 等宽(频)分箱

  •  作用:保证每个箱子的样本数一样
  •  语法:pandas.qcut  ( x, q, labels=None, precision=3 )

参数说明:

          q:整数(分成几份)  或   分位数(0~1)组成的数组(分割点)

   2.3.3 补充说明 

     1)以上两个函数会返回一个Categorical对象,会显示每个元素对应的箱名

     2)对于返回的Categorical对象,可以结合数学统计函数去做数据统计

import pandas as pd
year = [1992,1985,1937,2005,2015,1999] #数据
box = [1930,1960,1990,2020]    #箱子
box_name=["初期","中期","后期"]  #定义箱子名result1 = pd.cut(year,box,labels=box_name)  #按指定的箱分割,并指定箱名
print(result1)
print("-"*30)
print(result1.describe()) #做数据统计
print("-"*30)result2 = pd.qcut(year,3) #分成三段
print(result2)

 

 2.4 其他数据转化操作

操作方法参数
实现one hot encodeget_dummies(data)

columns:需要转换的列

prefix:转换后列名的前缀

随机抽取子集df.sample(n=)

replace:取出后是否放回(默认不放回)

n:抽取的样本数(列数目)

重命名轴索引df.rename(index= ,    columns=)可以输入字典{ 旧索引名:新索引名  }

 

  • one hot encode(独热编码):   将离散型特征的每一种取值都看成一种状态 
正常
one hot encode

3.字符串操作

 3.1 字符串常用方法

python常用字符串方法

 

import pandas as pd
str = "a / b/   wow"
new = str.split("/")
print(new)    # 按符号拆分字符串   ['a ', ' b', '   wow']piece = [x.strip() for x in new]
print(piece)  # 与strip搭配使用 ,去除空格   ['a', 'b', 'wow']jia = "--".join(piece)
print(jia)    # 将字符串用符号拼接起来   a--b--wowprint(jia.index("-")) # 返回“-”第一次出现的位置  1

 3.2 正则表达式

        正则表达式是一组由字母和符号组成的特殊文本,用于在文本中灵活的查找我们想要的格式的字符串,例如在一封邮件中提取所有的电话,在一篇文章中提取所有的地址

 

   3.2.1 正则表达式的常用函数

          要使用正则表达式函数,首先要导入re模块:import re

函数描述
re.compile()编译正则表达式,用其他函数再调用正则表达式,就不用重复编译了,提高效率
re.spilt(“分隔符”,data)通过指定的分隔符将字符串拆分

re.findall(正则表达式,data)

匹配出字符串中所有符合正则表达式的值,并且以列表的形式返回

re.sub(old,new)

替换字符串

比replace好处:可以在 "[ ]" 内输入多个符号,同时被取代 

re.search(正则表达式,data)

返回文本中第一个匹配项
re.match(正则表达式,data)仅从字符串起始位置开始匹配,若满足要求则返回

 

 

   3.2.2 正则表达式基础语法

 

 

  • 贪婪与非贪婪

       1)贪婪:'[a-zA-Z]{3,5}'    一>  要求找连续的3~5个字母

                  先找三个连续的字母,最多找到5个连续的字母后停止;在3个以后且5个以内发

           现了不是字母的也停止。然后接着找下一个

       2)非贪婪: '[a-zA-Z]{3}'     一>   找连续的3个字母,找到3个就停止,接着下一个

# 提取字符串a中所有的数字
import re
a = '孙悟空7猪八戒6沙和尚3唐僧6白龙马'
r = re.findall('[0-9]',a)
print(r)                   # 返回结果:['7', '6', '3', '6']# 找到字符串中间字母不是d或e的单词
a = 'xyz,xcz,xfz,xdz,xaz,xez'
r = re.findall('x[^de]z',a)
print(r)                   # 返回:['xyz', 'xcz', 'xfz', 'xaz']      # 提取特殊字符、空格、\n、\t等
import re
a = 'Excel 12345Word\n23456_PPT12lr'
r = re.findall('\W',a)
print(r)       

 

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

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

相关文章

抖音、小红书、视频号是如何判定是否限流的?

在这个新媒体营销的时代,抖音、小红书和视频号作为中国最受欢迎的社交媒体平台,为品牌和内容创作者提供了极具潜力的展示空间。然而,无论在哪个平台,限流成为很多人的苦恼。 抖音的推荐算法基于人群画像和初始流量池,同…

k8s的二进制部署(源码包部署)

实验条件: 主机名 IP地址 组件 作用 master01 20.0.0.17 kube-apiserver、kube-controller-manager、kube-scheduler、etcd k8s部署 master02 20.0.0.27 kube-apiserver、kube-controller-manager、kube-scheduler node01 20.0.0.37 kubelet、kube-pro…

Java开发框架和中间件面试题(10)

目录 104.怎么保证缓存和数据库数据的一致性? 105.什么是缓存穿透,什么是缓存雪崩?怎么解决? 106.如何对数据库进行优化? 107.使用索引时有哪些原则? 108.存储过程如何进行优化? 109.说说…

JVM高频面试题(2023最新版)

JVM面试题 1、JVM内存区域 Jvm包含两个子系统和两个组件。 1.1子系统 Class loader(类加载器):根据给定的全限定名类名(java.lang.object)来装载class文件到Runtime data area(运行时数据区)…

医院安全(不良)事件报告系统源码 支持二次开发、支持源码交付

医疗不良事件报告系统源码旨在建立全面的、统一的医疗不良事件标准分类系统和患者安全术语,使不良事件上报管理更加标准化和科学化。通过借鉴国内外医疗不良事件报告系统的先进经验,根据医疗不良事件的事件类型、处理事件的不同部门,灵活设置…

【python 的各种模块】(8) 在python使用matplotlib和wordcloud库来画wordcloud词云图

目录 目标:用python画出,网上流行的wordcloud词云图 1 准备工作 1.1环境准备 1.1.1安装步骤 1.2 资源准备 1.2.1 文本文件内容如下 1.2.2 图片资源 2 代码测试 2.1 第一版代码和效果 2.1.1 代码和效果 2.1.2 一般plt里解决中文乱码问题 2.1…

Java中XML的解析

1.采用第三方开元工具dom4j完成 使用步骤 1.导包dom4j的jar包 2.add as lib.... 3.创建核心对象, 读取xml得到Document对象 SAXReader sr new SAXReader(); Document doc sr.read(String path); 4.根据Document获取根元素对象 Element root doc.getRootElement(); …

win11 or win10 安装Ubuntu 22.04.3 LTS 子系统

** 1. 修改电脑的相关设置 ** 1.在系统设置中的开发者人员模式,设置为开启状态 2. 在控制面板中的程序中的启用或者关闭windows功能下,开启(勾选)子系统模式,然后重启电脑 2. 在Microsoft store中下载子系统&…

深度学习 | DRNN、BRNN、LSTM、GRU

1、深度循环神经网络 1.1、基本思想 能捕捉数据中更复杂模式并更好地处理长期依赖关系。 深度分层模型比浅层模型更有效率。 Deep RNN比传统RNN表征能力更强。 那么该如何引入深层结构呢? 传统的RNN在每个时间步的迭代都可以分为三个部分: 1.2、三种深层…

算法与数据结构--特殊有序集的线性时间排序算法

一.计数排序算法 基本思想:统计每个输入元素的个数,然后根据这些计数值重构原数组。 使用范围:需要知道元素大小范围,就是最大值是多少。 【排序算法】计数排序_哔哩哔哩_bilibili 二.基数排序 使用场景:只适用于…

Laravel的知识点

1.{{ }} 是在 HTML 中内嵌 PHP 的 Blade 语法标识符,表示包含在该区块内的代码都将使用 PHP 来编译运行。 2.两种写法 3.return void 在这段注释中,"return void" 表示该函数或方法没有返回值。这意味着它执行某些操作或任务,但…

论文阅读《Rethinking Efficient Lane Detection via Curve Modeling》

目录 Abstract 1. Introduction 2. Related Work 3. BezierLaneNet 3.1. Overview 3.2. Feature Flip Fusion 3.3. End-to-end Fit of a Bezier Curve 4. Experiments 4.1. Datasets 4.2. Evalutaion Metics 4.3. Implementation Details 4.4. Comparisons 4.5. A…

使用克魔助手进行iOS数据抓包和HTTP抓包的方法详解

摘要 本文博客将介绍如何在iOS环境下使用克魔助手进行数据抓包和HTTP抓包。通过抓包,开发者可以分析移动应用程序的网络请求发送和接收过程,识别潜在的性能和安全问题,提高应用的质量和安全性。 引言 在移动应用程序的开发和测试过程中&am…

Linux磁盘与文件系统管理

目录 在linux系统中使用硬盘 磁盘的数据结构 磁盘接口类型 字母含义 MBR磁盘分区 分区类型 分区的缺点 文件系统的 文件系统有什么作用 文件系统的修复 检测并确认新磁盘 参看磁盘信息 查看磁盘信息 添加磁盘 查看添加磁盘情况:sda系统磁盘&#xff…

每周一算法:区间覆盖

问题描述 给定 N N N个闭区间 [ a i , b i ] [a_i,b_i] [ai​,bi​],以及一个线段区间 [ s , t ] [s,t] [s,t],请你选择尽量少的区间,将指定线段区间完全覆盖。 输出最少区间数,如果无法完全覆盖则输出 − 1 -1 −1。 输入格式…

【自然语言处理】第3部分:识别文本中的个人身份信息

自我介绍 做一个简单介绍,酒架年近48 ,有20多年IT工作经历,目前在一家500强做企业架构.因为工作需要,另外也因为兴趣涉猎比较广,为了自己学习建立了三个博客,分别是【全球IT瞭望】,【…

解决Hive在DataGrip 中注释乱码问题

注释属于元数据的一部分,同样存储在mysql的metastore库中,如果metastore库的字符集不支持中文,就会导致中文显示乱码。 不建议修改Hive元数据库的编码,此处我们在metastore中找存储注释的表,找到表中存储注释的字段&a…

软件测试/测试开发丨Python学习笔记之基本数据类型与操作

一、变量 1、变量的定义: a. 在python中,变量是一种存储数据的载体。计算机中的变量是实际存在的数据或者说是存储器中存储数据的一块内存空间; b.变量的值可以被读取和修改。 2、命名规则: a.变量名由字母(广义的Unic…

Python 常用模块Logging

Python 常用模块Logging 【序言】 logging模块是专门用来做日志记录的模块 【一】日志等级 默认打印结果到终端上 CRITICAL 50 # 致命错误 ERROR 40 # 错误 WARNING 30 # 警告 INFO 20 # 消息 DEBUG 10 # 调试 NOTSET 0 # 不设置示例: 默认级别为…

Unity引擎有哪些优点

Unity引擎是一款跨平台的游戏引擎,拥有很多的优点,如跨平台支持、强大的工具和编辑器、灵活的脚本支持、丰富的资源库和强大的社区生态系统等,让他成为众多开发者选择的游戏开发引擎。下面我简单的介绍一下Unity引擎的优点。 跨平台支持 跨…