文章目录

  • 1. 数据清洗
    • 1.1 空值和缺失值的处理
      • 1.1.1 使用isnull()和notnull()函数
        • 1.1.1.1 isnull()语法格式:
        • 1.1.1.2 notnull()语法格式:
      • 1.1.2 使用 dropna()和fillna()方法
        • 1.1.2.1 dropna()删除含有空值或缺失值的行或列
        • 1.1.2.2 fillna()方法可以实现填充空值或者缺失值
    • 1.2 重复值的处理
      • 1.2.1 使用duplicated()和drop_duplicates()方法
      • 1.2.2 duplicated()方法的语法格式
          • 强调注意:
        • 1.2.2.1 drop_duplicates()方法的语法格式
    • 1.3 异常值的处理
      • 1.3.1 常用的检测方法有3σ原则(拉依达准则)和箱形图
        • 1.3.1.1 3σ原则
        • 1.3.1.2 箱形图
    • 1.4 更改数据类型
      • 1.4.1 在使用构造方法中的 dtype参数指定数据类型
      • 1.4.2 通过 astype()方法可以强制转换数据的类型。
      • 1.4.3 to_numeric()函数可以将传入的参数转换为数值类型。
  • 2. 数据合并
    • 2.1轴向堆叠数据
      • 2.1.1 concat()函数
    • 2.2 主键合并数据
      • 2.2.1 merge()函数
        • 2.2.1.1 how参数可以取下列值
    • 2.3 根据行索引合并数据
      • 2.3.1 join()方法
    • 2.4 合并重叠数据
      • 2.4.1 combine_first()方法
  • 3. 数据重塑
    • 3.1 重塑层次化索引
      • 3.1.1 stack()方法
      • 3.1.2 unstack()方法
    • 3.2 轴向旋转
      • 3.2.1 pivot()方法
  • 4. 数据转换
    • 4.1 重命名轴索引
      • 4.1.1 rename()方法
    • 4.2 离散化连续数据
      • 4.2.1 cut ()函数
    • 4.3 哑变量处理类别型数据
      • 4.3.1 get_dummies()函数
      • 4.3.2 cut()函数与get_dummies()函数的混合使用

1. 数据清洗

1.1 空值和缺失值的处理

​ 空值一般表示数据未知、不适用或将在以后添加数据。缺失值是指数据集中某个或某些属性的值是不完整的。

​ 一般空值使用None表示,缺失值使用NaN表示

1.1.1 使用isnull()和notnull()函数

​ 可以判断数据集中是否存在空值和缺失值

1.1.1.1 isnull()语法格式:

pandas . isnull(obj)

1.1.1.2 notnull()语法格式:

pandas . notnull(obj)

​ notnull()与 isnull()函数的功能是一样的,都可以判断数据中是否存在空值或缺失值,不同处在于,前者发现数据中有空值或缺失值时返回False,后者返回的是True.

1.1.2 使用 dropna()和fillna()方法

​ 对缺失值进行删除和填充。

1.1.2.1 dropna()删除含有空值或缺失值的行或列

​ axis:确定过滤行或列

​ how:确定过滤的标准,默认是‘any’

​ inplase::False=不修改对象本身

1.1.2.2 fillna()方法可以实现填充空值或者缺失值

​ value:用于填充的数值,
​ method:表示填充方式,默认值为None,‘ffill’前填充,‘bfill’后填充
​ limit:可以连续填充的最大数量,默认None.

1.2 重复值的处理

​ 当数据中出现了重复值,在大多数情况下需要进行删除。

1.2.1 使用duplicated()和drop_duplicates()方法

​ duplicated()方法用于标记是否有重复值。
​ drop_duplicates()方法用于删除重复值。
​ 它们的判断标准是一样的,即只要两条数中所有条目的值完全相等,就判断为重复值。

1.2.2 duplicated()方法的语法格式

​ subset:用于识别重复的列标签或列标签序列,默认识别所有的列标签。
​ keep:删除重复项并保留第一次出现的项取值可以为 first、last或 False

​ duplicated()方法用于标记 Pandas对象的数据是否重复,重复则标记为True,不重复则标记为False,所以该方法返回一个由布尔值组成的Series对象,它的行索引保持不变,数据则变为标记的布尔值

强调注意:

​ (1)只有数据表中两个条目间所有列的内容都相等时,duplicated()方法才会判断为重复值。
​ (2)duplicated()方法支持从前向后( first)和从后向前(last)两种重复值查找模式,默认是从前向后查找判断重复值的。换句话说,就是将后出现的相同条目判断为重复值。

1.2.2.1 drop_duplicates()方法的语法格式

2 上述方法中, inplace参数接收一个布尔类型的值,表示是否替换原来的数据,默认为False.

1.3 异常值的处理

​ 异常值是指样本中的个别值,其数值明显偏离它所属样本的其余观测值,这些数值是不合理的或错误的。

1.3.1 常用的检测方法有3σ原则(拉依达准则)和箱形图

​ 3σ原则是基于正态分布的数据检洳而箱形图没有什么严格的要求,可以检测任意一组数据,

1.3.1.1 3σ原则

​ 是指假设一组检测数据只含有随机误差,对其进行计算处理得到标准偏差,按一定概率确定一个区间,凡是超过这个区间的误差都是粗大误差,在此误差的范围内的数据应予以剔除。

数值几乎全部集中在(μ-3σ,μ+3σ)]区间内,超出这个范围的可能性仅占不到0.3%.所以,凡是误差超过这个区间的就属于异常值,应予以剔除

def three_sidma(ser):# ser 为数据的列mean_value=ser.mean()# 平均值std_value=ser.std()# 标准值rule=(ser<mean_value-3*std_value)|(ser>mean_value+3*std_value)index=np.arange(ser.shape[0])[rule]outrange=ser.iloc[index]return outrange

1.3.1.2 箱形图

​ 箱开图是一种用作显示一组数据分散情况的统计图。在箱形图中,异常值通常被定义为小于QL-15QR或大于QU+1.5IQR的值。
​ (1)QL称为下四分位数,表示全部观察中四分之一的数据取值比它小
​ (2)QU称为上四分位数,表示全部观察值中有四分之一的数据取值比它大
​ (3)IQR称为四分位数间距,是上四分位数0与下四分位数则之差,其间包含了全部观察值的一半。

离散点表示的是异常值,上界表示除异常值以外数据中最大值;下界表示除异常值以外数据中最小值。

boxplot()方法,专门用来绘制箱形图。


​ 检测出异常值后,通常会采用如下四种方式处理这些异常值
​ a)直接将含有异常值的记录删除。
​ b)用具体的值来进行替换,可用前后两个观测值的平均值修正该异常值
​ c)不处理,直接在具有异常值的数据集上进行统计分析
​ d)视为缺失值,利用缺失值的处理方法修正该异常值。

如果希望对异常值进行修改,则可以使用replace()方法进行替换,该方法不仅可以对单个数据进行替换,也可以多个数据执行批量替换操作。

​ to_replace:表示查找被替换值的方式
​ value:用来替换任何匹配 to_replace的值,默认值None.

1.4 更改数据类型

​ 在处理数据时,可能会遇到数据类型不一致的问题。例如,通过爬虫采集到的数据都是整型的数据,在使用数据时希望保留两位小数点,这时就需要将数据的类型转换成浮点型。

​ 创建 Pandas数据对象时,如果没有明确地指出数据的类型,则可以根据传入的数据推断出来并且通过 dtypes属性进行查看。

1.4.1 在使用构造方法中的 dtype参数指定数据类型

1.4.2 通过 astype()方法可以强制转换数据的类型。

​ dtype:表示数据的类型。
​ errors:错误采取的处理方式,可以取值为 raise或 ignore.其中, raise表示允许引发异常ignore表示抑制异常,默认为 raise.

astype()方法存在着一些局限性,只要待转换的数据中存在非数字以外的字符,在使用 astype()方法进行类型转换时就会出现错误,而to_numeric()函数的出现正好解决了这个问题。

1.4.3 to_numeric()函数可以将传入的参数转换为数值类型。

arg:表示要转换的数据,可以是list、tuple、 Series.
errors:表示错误采取的处理方式。

2. 数据合并

2.1轴向堆叠数据

2.1.1 concat()函数

​ concat()函数可以沿着一条轴将多个对象进行堆叠,其使用方式类似数据库中的数据表合并。

axis:表示连接的轴向,可以为0或1,默认为0
join:表示连接的方式,inner表示内连接, outer表示外连接默认使用外连接。
i gnore_index:如果设置为True,清除现有索引并重置索引值。
names:结果分层索引中的层级的名称。

​ 根据轴方向的不同,可以将堆叠分成横向堆叠与纵向堆叠,默认采用的是纵向堆叠方式

​ 在堆叠数据时,默认采用的是外连接(join参数设为 outer)的方式进行合并,当然也可以通过join=inner设置为内连接的方式。

2.2 主键合并数据

​ 主键合并类似于关系型数据库的连接方式,它是指根据个或多个键将不同的 DataFrame对象连接起来,大多数是将两个 DataFrame对象中重叠的列作为合并的键。

2.2.1 merge()函数

left:参与合并的左侧 DataFrame对象。
right:参与合并的右侧 DataFrame对象。
how:表示连接方式,默认为 inner。

2.2.1.1 how参数可以取下列值

left:使用左侧的 DataFrame的键,类似SQL的左外连接
right:使用右侧的 DataFrame的键,类似SQL的右外连接
outer:使用两个 DataFrame所有的键,类似SQL的全连接。
inner:使用两个 DataFrame键的交集,类似SQL的内连接

​ 在使用 merge()函数进行合并时,默认会使用重叠的列索引做为合并键,并采用内连接方式合并数据,即取行索引重叠的部分。

​ merge()函数还支持对含有多个重叠列的 Data frame对象进行合并。

​ 使用外连接的方式将 left与right进行合并时,列中相同的数据会重叠,没有数据的位置使用NaN进行填充。

2.3 根据行索引合并数据

​ join()方法能够通过索引或指定列来连接多个DataFrame对象

2.3.1 join()方法

on:名称,用于连接列名。
how:可以从{‘left‘,’right’,’ outer‘,‘inner’}中任选一个,默认使用左连接的方式。
sort:根据连接键对合并的数据进行排序,默认为 False.

2.4 合并重叠数据

​ 当DataFrame对象中出现了缺失数据,而我们希望使用其他 DataFrame对象中的数据填充缺失数据,则可以通过 combine_first()方法为缺失数据填充。

2.4.1 combine_first()方法

上述方法中只有一个参数 other,该参数用于接收填充缺失值的 DataFrame对象。

注意:使用combine_first()方法合并两个DataFrame对象时,必须确保它们的行索引和列索引有重叠的部分

3. 数据重塑

3.1 重塑层次化索引

​ Pandas中重塑层次化索引的操作主要是 stack()方法和 unstack()方法,前者是将数据的列“旋转”为行,后者是将数据的行“旋转”为列。

3.1.1 stack()方法

stack()方法可以将数据的列索引转换为行索引。

level:默认为-1,表示操作内层索引。若设为0,表示操作外层索引。

dropna:表示是否将旋转后的缺失值删除,若设为True,则表示自动过滤缺失值,设置为 False则相反。

3.1.2 unstack()方法

unstack()方法可以将数据的行索引转换为列索引

level:默认为-1,表示操作内层索引,0表示操作外层索引。

fill_value:若产生了缺失值,则可以设置这个参数用来替换NaN。

3.2 轴向旋转

​ 在 Pandas中pivot()方法提供了这样的功能,它会根据给定的行或列索引重新组织一个 DataFrame对象。

3.2.1 pivot()方法

index:用于创建新 DataFrame对象的行索引。
columns:用于创建新 DataFrame对象的列索引
values:用于填充新 DataFrame对象中的值。

4. 数据转换

4.1 重命名轴索引

Pandas中提供了一个rename()方法来重命名个别列索引或行索引的标签或名称。

4.1.1 rename()方法

index,columns:表示对行索引名或列索引名的转换。

inplace:默认为False,表示是否返回新的Pandas对象。

4.2 离散化连续数据

Pandas 的 cut ()函数能够实现离散化操作。

4.2.1 cut ()函数

x:表示要分箱的数组,必须是一维的。

bins:接收int和序列类型的数据。(序列划分区间)

right:是否包含右端点,决定区间的开闭,默认为True。

cut()函数会返回一个Categorical对象,我们可以将其看作一组表示 面元名称 的字符串,它包含了分组的数量以及不同分类的名称。

​ Categories对象中的区间范围跟数学符号中的“区间”一样,都是用圆括号表示开区间,用方括号则表示闭区间。

ages=[18,22,25,27,21,23,37,31,60,45,82]
bins=[0,18,25,50,60,100] # bins是一个序列,划分区间
cuts=pd.cut(ages,bins)
cuts


设置左闭右开区间,则可以在调用cut()函数时传入right=False进行修改。

# 如果希望设置左右开区间,则可以在调用cut函数时传入right= False进行修改。
pd.cut(ages,bins=bins,right=False)

# 可以在调用cut函数时指定labels=  用干生成区间的标签
pd.cut(ages,bins=bins,labels=['少年','青年','中年','中老年','老年'])

4.3 哑变量处理类别型数据

在Pandas中,可以使用get_dummies()函数对类别特征进行哑变量处理.

4.3.1 get_dummies()函数

data:表示哑变量处理的数据。

prefix:表示列名的前缀,默认为None。(‘col’)

prefix_sep:用于附加前缀作为分隔符使用,默认为“_”。


哑变量又称应拟变量,名义变量,从名称上看就知道,它是人为虚设的变量,用来反映某个交量的不间类别
​ 使用哑变最处理类别转换,事实上就是将分类变量转换为哑变最矩阵或指标矩阵,矩阵的值通常用“0”或“1”表示</u>

df1=pd.DataFrame({'职业':['工人','学生','司机','教师','导游']})
# get_dummies()对类别特进行哑变量处理
pd.get_dummies(df1)

pd.get_dummies(df1,prefix=['col'])


4.3.2 cut()函数与get_dummies()函数的混合使用

ret=pd.cut(ages,bins=bins,right=False,labels=['少年','青年','中年','中老年','老年'])
pd.get_dummies(ret,prefix='年龄类别',prefix_sep=':')

Python数据分析之数据预处理(数据清洗、数据合并、数据重塑、数据转换)学习笔记相关推荐

  1. c++控制台应用每一列数据如何对齐_懂Excel就能轻松入门Python数据分析包pandas(十六):合并数据...

    此系列文章收录在公众号中:数据大宇宙 > 数据处理 >E-pd 转发本文并私信我"python",即可获得Python资料以及更多系列文章(持续更新的) 经常听别人说 ...

  2. 《Python数据分析与挖掘实战》张良均,第一章学习笔记

    第一章从餐饮行业来引出数据挖掘 [有问题或错误,请私信我将及时改正:借鉴文章标明出处,谢谢] 刚开始讲到了T餐饮企业的管理系统(5个管理系统),因为多方面管理系统加强了此企业的信息化管理,提高了工作效 ...

  3. update 和 left join 合并_Python数据预处理——连接、合并、重塑样本

    merge.pd.concat .reshape 1.横向连接 内.外连接 merge df1.merge(df2,how='inner',on='id') 其中how='left'/'right'/ ...

  4. python数据预处理之将类别数据转换为数值的方法

    在进行python数据分析的时候,首先要进行数据预处理. 有时候不得不处理一些非数值类别的数据,嗯, 今天要说的就是面对这些数据该如何处理. 目前了解到的大概有三种方法: 1,通过LabelEncod ...

  5. 【Python】数据预处理之将类别数据转换为数值的方法(含Python代码分析)

    在进行Python数据分析的时候,首先要进行数据预处理.但是有时候不得不处理一些非数值类别的数据,遇到这类问题时该怎么解决呢? 目前为止,总结了三种方法,这里分享给大家. 一.通过mapping方式, ...

  6. 机器学习之数据预处理——数据清洗(缺失值、异常值和重复值的处理)

    机器学习之数据预处理--数据清洗缺失值.异常值和重复值的处理 基础知识 技术点总结 数据列缺失的处理方法 1.丢弃(缺失值处理) 1.生成一份随机数据 2.查看哪些值缺失 3.获得含有NA的列 4.获 ...

  7. python数据分析项目实战—————链家北京租房数据统计分析

    链家北京租房数据分析 1.读取数据 import pandas as pd import matplotlib.pyplot as plt import numpy as npdata_dframe ...

  8. 使用jupyter进行数据预处理-数据清洗

    使用jupyter进行数据预处理-数据清洗 使用jupyter进行数据预处理-数据清洗 查询各字段的数据类型 使用pandas对列进行重命名 缺失值处理 判断缺失值是否存在 处理缺失值([https: ...

  9. 地铁大数据挖掘之数据预处理——从原始一卡通数据提取城市地铁客流(一)

    这是很久以前写的一段代码,很简单很基础.最近突然用到,这里把它分享出来,希望可以为有需要的朋友提供帮助. 以及欢迎阅读这一系列第二篇:地铁大数据挖掘之客流数据预处理--从原始一卡通数据提取城市地铁客流 ...

  10. 地铁大数据挖掘之数据预处理——从原始一卡通数据提取城市地铁客流(二)

    关于初步处理,请参考地铁大数据挖掘之客流数据预处理--从原始一卡通数据提取城市地铁客流(一). 上一篇博客对数据进行了初步处理,得到结果如下图: "_10min"字段代表所处的时间 ...

最新文章

  1. python十六进制看图片
  2. ESP32 flash容量配置
  3. Java按规则生成唯一编号
  4. asp.net 拦截html,关于c#:如何在-ASPNET-Core-中实现全局异常拦截
  5. cesium 雷达扫描(附源码下载)
  6. [Asp.Net] Form验证中 user.identity为false
  7. Android - shape圆形画法(oval)
  8. IDEA使用Tomcat部署项目
  9. MarkDown 语法手册
  10. pc上最好用的pdf阅读工具(PDF Xchange Viewer)
  11. 现在俏皮话越来越多了
  12. 如何在FPS游戏中快速实现简单的人体定位算法
  13. 搜索关键词挖掘,搜索关键词填写时需要注意的几项。
  14. 我如何从月薪8K到25K?现在分享给大家自己的经历
  15. 漫谈程序员系列:程序员该不该考虑初创公司
  16. 争议南科大 何须尽责朱清时
  17. 房地产销售一直不开单?看看销售冠军的逼单话术
  18. STM32 PWM控制舵机——原理、接线、源程序
  19. 9.性能测试工具Locust的高级使用——分布式使用Locust及定制Locust
  20. 新概念模拟电路——晶体管构建的放大电路动态分析

热门文章

  1. Java经典300例-基础篇-001:Hello Kitty
  2. postman传数组
  3. html3D效果可以在手机打开吗,HTML手机怎么打开
  4. 从零开始学USB(二十四、最简单的USB驱动开始)
  5. Android注解之从入门到并没有放弃
  6. 老司机 iOS 周报 #41 | 2018-10-29
  7. 优化算法(二)遗传算法及python实现
  8. Python - JS逆向破解实现翻译软件
  9. python 朋友圈点赞收费吗_微信点赞扣费是真是假 微信点赞要收钱了吗
  10. Words Reciting 2016.5.3