Pandas数据预处理

以下为个人课程学习笔记,主做日常积累,如有问题,感谢指正,推荐相关网站写的真不错pandas 教程 - 盖若本 pandas 中文教程从 0 开始掌握利用 pandas 做数据处理和数据分析。可作为 pandas 入门进阶课程、pandas 中文手册、用法大全,配有案例讲解和速查手册。icon-default.png?t=M276https://www.gairuo.com/p/pandas-tutorial

1. 合并数据

(1)堆叠

堆叠就是简单的把两个表拼在一起,也被称为轴向连接、绑定或连接。依照连接轴方向,数据堆叠可分为横向堆叠和纵向堆叠。

横向堆叠是将两个表在x轴向连接在一起,使用concat函数;纵向堆叠是将两个表在y轴向连接在一起,使用concat函数;

pandas.concat

objs 要堆叠的两个对象

axis 默认为 0 列堆叠即在y轴向拼接 axis = 1 行对齐 = 0 列队齐

join 表示其他轴向上的索引是inner(交集)内连接 还是 outer(并集)外连接,默认outer

当两个表索引不完全相同时,内连接返回索引重叠部分,外连接返回索引的并集,缺值NaN。当表完全相同时,inner与outer是相同的,结果都是按照x或y轴拼接起来。

append方法也可以用于纵向合并,但是使用append方法实现纵向表堆叠有一个前提条件那就是两张表列名需要完全一致

df3.append(df4)

other 要添加的新数据

(2)主键合并

主键合并是通过一个或多个键将两个数据集的行连接起来。

merge可以在合并过程中对数据集中的数据排序。

merge

pd.merge(detail,order,left_on='order_id',right_on='info_id')

left、right 要添加的新数据1、新数据2

how 接受inner outer left right。表示数据连接方式,默认inner

on 表示两个数据合并的主键(必须一致)

left_on right_on 分别表示left与right参数接收数据用于合并的主键。

left_index right_index 表示是否将left或right参数接受的数据的index作为连接主键。

sort 是否根据连接键对合并后的数据进行排序。 False

suffixes 表示用于追加到left和rihgt参数接受数据列名相同时的后缀 ‘_name’

join方法也可以实现部分主键合并的功能。但是使用join时,两个主键的名字必须相同

join

例子:

order.rename({'info_id':'order_id'},inplace=True) # 更改order表中info_id列名为order_id

detail.join(order,on='order_id',rsuffix)

other 要参与链接的数据

on 用于连接的列名

how

lsuffix 用于追加到左侧重叠列名的尾缀

rsuffix 用于追加到右侧重叠列名的尾缀

sort

(3)重叠合并

df5.combine_first(df6) #把df5与df6合并

通俗的理解是得到两个含有空缺值的表合并彼此补全的表


近期学习补充:

filter        过滤器,可以对行名和列名进行筛选,过滤掉符合条件的数据,返回其他数据

query      可以在方法中直接写类似于sql where的条件,等效于.loc,单个人觉得更简洁

2. 清洗数据

数据重复会导致数据的方差变小数据分布发生较大变化

缺失会导致样本信息减少,不仅增加了数据分析的难度,还会导致数据分析的结果产生偏差

异常值会产生“伪回归”。

(1)检测与处理重复值

常见数据重复分为两种:一种为记录重复,即一个或多个特征的某几条记录的值完全相同;另一种为特征重复,即存在一个或多个特征名称不同,但数据完全相同的情况。

记录去重:

drop_duplicates去重方法,只对DataFrame或者Serise类型有效。这种方法不会改变数据原始排列,兼具代码简洁和运行稳定的特点。

datile['dish_name'].drop_duplicates() # 单列时去重

datile.drop_duplicates(subset = ['order_id','emp_id'])

#多列去重

subset 要去去重的数据

keep 用来设定去重时保存的数据,first保存第一个 last保存最后一个 False只要有重复都不保留 默认first

inplace 是否对原表操作

特征去重:

要去除连续的特征重复,可以利用特征间的相似度将两个相似度为1的特征去除一个。

corr

相似度计算方法为corr,使用该方法计算相似度时,默认使用pearson方法,参数为methon = ,还可以支持

spearman、kendall法。输出的结果为两个特征的相似度矩阵,通过相似度矩阵去重的弊端是只能对数值型重复特征去重,类别型的特征之间无法计算相似系数衡量相似度,因而无法去重。

(2)监测与处理缺失值

数据中某个或某些特征的值是不完整的,这些值称为缺失值。

detail.isnull().sum()

返回是缺失值的个数

detail.notnull().sum()

返回不是缺失值的个数

删除法

删除法是指将含有缺失值的特征或记录删除。删除法分为删除观测记录和删除特征,它属于通过减少样本数量来换取信息完整度的一种方法。

detail.dropna(axis = 1,how='any')

axis 0删除观测记录 行 1删除特征列

how 当行和列,any存在缺失值就删除 all当所有值都是缺失值的时候才删除

subset 需要去重的列/行,默认None 所有列/行

inplace

替换法

替换法是指用一个特定的值代替缺失值。特征可以是数值型和类别型,缺失值为数值型使用均值、中位数、众数等描述其集中趋势的统计量来代替缺失值。类别型使用众数替换缺失值。

detail.fillna

value 表示用来代替缺失值的值

method 接受 backfill或bfill 使用下一个非缺失值补全;pad或ffill表示使用上一个非缺失值

axis 0 1 默认1 列

inplace

limit 表示填补缺失值个数上限,超过则不进行填补。

删除法会引起数据结构变动,样本减少;替换法影响数据的标准差,导致信息量变动。

插值法

常用插值法有线性插值法、多项式插值法、样条插值法

线性插值法:一种简单的方法,针对已知的值求出线性方程,通过求解线性方程得到缺失值。

多项式插值法:利用已知的值拟合一个多项式,使用现有的数据满足这个多项式,再利用这个多项式求解缺失值。拉格朗日插值法、牛顿插值

样条插值法:以可变样条来做出一条经过一系列点的光滑曲线的插值方法。插值样条有一些多项式组成,每个多项式都由相邻的两个数据决定。

SciPy.interpolate

from scipy.interpolate import interpld #线性插值

只有自变量和因变量为线性关系拟合才出色

~ lagrange # 拉格朗日插值拟合

~ spline #样条插值

SciPy库中的interpolate模块除了提供常规的插值外,还提供了例如图形学领域具有重要作用的重心坐标插值等。

(3)检测与处理异常值

异常值是指数据中个别致的数值明显偏离其余的数值,有时也称为离群点,检测异常值就是检查数据中是否有输入错误以及是由含有不合理的数据。

常用的异常值检验方法3σ原则、箱线图分析两种方法。

3σ原则

3σ原则又称拉依达准则 ,假设一组数据只包含随机误差,对原始数据计算处理得到标准差,按照概率确定区间,认为误差超过区间就属于异常。只适用于正态或近似正态分布的样本数据,σ代表标准差,μ代表均值。

箱线图

3. 标准化数据

(1)规范化

为消除特征之间的量纲和取值范围差异可能会造成的影响,需要对数据进行标准化处理,也可以称作规范化处理。

离差标准化数据:是一种线性变换,结果映射到01区间,缺点若数据集中的某个数值很大则离差标准化的值就会接近零,并且相互之间差别不大。

标准差标准化数据:0均值标准化、z分数标准化 ,均值为0 标准差为1,存在负值。受数据分布影响小。

小数定标标准化数据:【-1,1】,移动小数位数取决于数据的绝对值大小。适用范围广,受数据分布影响小。

4. 转换数据

(1)哑变量

get_dummies

对类别特征进行哑变量处理主要解决了部分算法无法处理类别型数据的问题,在一定程度上起到扩充特征的作用。

(2)离散化

等宽法、等频法、聚类分析法

等宽法

将数据的值域分布成具有相同宽度的区间,区间个数有数据本身的特点决定或者由用户指定,与制作频率分布表类似。

cut

x 数据

bins int代表离散化类别数目;序列表示切分区间,每两个数一个间隔

right 右侧是否是闭区间 True

labels 离散化化后的类别名称

retbins 是否返回区间标签 False

precision 标签精度 3

缺点:等宽法对数据的分布要求很高,若数据分布不均匀,各个类的数目也会非常不均匀,有些区间数据很多,有些区间数据很少。

你可能感兴趣的:(学习积累,python)