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

news2025/1/18 7:25:20

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--wow

print(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.coloradmin.cn/o/1340284.html

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

相关文章

BUUCTF Reverse/[2019红帽杯]Snake

BUUCTF Reverse/[2019红帽杯]Snake 下载解压缩后得到可执行文件,而且有一个unity的应用程序,应该是用unity编写的游戏 打开是一个贪吃蛇游戏 用.NET Reflector打开Assembly-CSharp.dll。(unity在打包后,会将所有的代码打进一个Ass…

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

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

【unity3D-粒子系统】粒子系统主模块-Particle System篇

💗 未来的游戏开发程序媛,现在的努力学习菜鸡 💦本专栏是我关于游戏开发的学习笔记 🈶本篇是unity的粒子系统主模块-Particle System 基础知识 Particle System 介绍:粒子系统的主模块,是必需的模块&#x…

Docker部署Plik临时文件上传系统并实现远程访问设备上传下载文件

文章目录 1. Docker部署Plik2. 本地访问Plik3. Linux安装Cpolar4. 配置Plik公网地址5. 远程访问Plik6. 固定Plik公网地址7. 固定地址访问Plik 本文介绍如何使用Linux docker方式快速安装Plik并且结合Cpolar内网穿透工具实现远程访问,实现随时随地在任意设备上传或者…

golang并发安全-sync.map

sync.map解决的问题 golang 原生map是存在并发读写的问题,在并发读写时候会抛出异常 func main() {mT : make(map[int]int)g1 : []int{1, 2, 3, 4, 5, 6}g2 : []int{4, 5, 6, 7, 8, 9}go func() {for i : range g1 {mT[i] i}}()go func() {for i : range g2 {mT[…

打开相机失败 出现错误的原因

如何解决? Debug中缺少DLL文件 以下参考周姐文档 相机调用步骤 学习相机第三方库的安装 https://blog.csdn.net/Qingshan_z/article/details/117257136书签:QT添加库(静态库和动态库)_Qingshan_z的博客-CSDN博客_qt添加库 添加文…

在 Android 手机上从SD 卡恢复数据的 6 个有效应用程序

如果您有 Android 设备,您可能会将个人和专业的重要文件保存在设备的 SD 卡上。这些文件包括照片、视频、文档和各种其他类型的文件。您绝对不想丢失这些文件,但当您的 SD 卡损坏时,数据丢失是不可避免的。 幸运的是,您不需要这样…

22、Qt使用QSettings类读/写初始化文件(.ini)和读/写注册表(Registry)

一、读/写初始化文件(.ini) 1、写 使用如下代码会生成"config.ini"文件,文件内容如下: QSettings settings("config.ini", QSettings::IniFormat); settings.setValue("/MySettings/name", "root"); setti…

基于Java Swing的图书管理系统

一、项目总体架构 本项目基于Java Swing框架,数据库采用的是MySQL。项目文件夹如下: 二、项目截图 1.登录和注册界面 2.用户界面 3.管理员管理图书类别 4.管理员管理书籍 5.管理员管理用户 项目总体包括源代码和课程论文,需要源码的…

nc不支持-e时的反弹

如果你想要使用nc反弹shell,但是不能使用-e选项,你可以尝试以下的替代方法: 使用mkfifo或mknod命令创建一个命名管道,然后使用cat命令读取管道中的内容,并将其传递给/bin/sh执行,再将输出重定向到nc连接。…

论文阅读《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…

【北亚数据恢复】mysql表被truncate,表数据被delete的数据恢复案例

云服务器数据恢复环境: 华为ECS云服务器,linux操作系统,mysql数据库(innodb引擎)。作为网站服务器使用。 云服务器故障: 在执行mysql数据库版本更新测试时,误将本应该在测试库上执行的sql脚本执…

搜维尔科技:经脉腧穴虚拟针灸VR虚拟教学平台AcuMap软件案例分享

北京中医药大学经脉腧穴VR虚拟教学平台案例 主要产品 HTCvive ,AcuMap; 实施内容 一、项目说明 (1)穴位取穴与体表解剖标志关系;(2)穴下层次解剖及周围解剖结构展示; &#xf…

在线客服系统推荐:提升客户满意度与工作效率的利器

客服系统分为售前和售后,售前客户系统是为了能够及时解决客户在购买产品前的问题,通过客服人员让客户了解产品的功能点是能够满足他们的需求点,从未达到转化的目的。 而售后客户系统主要是提供给购买后的客户强大的产品售后支持,…

Android 13 动态启用或禁用IPV6

介绍 客户想要通过APK来控制IPV6的启用和禁用,这里我们通过广播的方式来让客户控制IPV6。 效果展示 adb shell ifconfig 这里我们用debug软件,将下面节点置为1 如图ipv6已被禁用了 echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6 修改 接下来…

Eclipse安装Jrebel eclipse免重启加载项目

每次修改JAVA文件都需要重新启动项目,加载时间太长,eclipse安装jrebel控件,避免重启项目节省时间。 1、Help->Eclipse Marketplace 2、搜索jrebel 3、Help->jrebel->Configuration 配置jrebel 4、激活jrebel 5、在红色框中填入 http://jrebel…

Linux 查看系统类型和版本(内核版本 | 发行版本)

Linux 查看系统类型和版本 首先普及下linux系统的版本内容1. 查看linux系统内核版本2. 查看linux系统发行版本 首先普及下linux系统的版本内容 内核版本和发行版本区别 内核版本就是指 Linux 中最基层的代码,版本号如 Linux version 3.10.0-327.22.2.el7.x86_64发行…

新建虚拟环境并与Jupyter内核连接

第一步:在cmd里新建虚拟环境,shap38是新建的虚拟环境的名字 ,python=3.x conda create -n shap38 python=3.8第二步,安装ipykernel,打开anconda powershell prompt: 虚拟环境的文件夹位置,我的如图所示: 进入文件夹并复制地址: 输入复制的文件夹地址更改文件夹:…

Leetcode—62.不同路径【中等】

2023每日刷题&#xff08;七十二&#xff09; Leetcode—62.不同路径 超时dfs代码 class Solution { public:int uniquePaths(int m, int n) {int starti 1, startj 1;int ans 0;function<void(int, int)> dfs [&](int i, int j) {if(i m && j n) {a…

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(); …