2024年最新用Python进行数据清洗,这7种方法你一定要掌握(1),binder机制原理面试

文末有福利领取哦~

👉一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。img

👉二、Python必备开发工具

img
👉三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
img

👉 四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(文末领读者福利)
img

👉五、Python练习题

检查学习结果。
img

👉六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
img

img

👉因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

0 99.0

1 82.0

2 87.0

3 77.0

4 77.0

5 82.0

Name: score, dtype: float64

3. 缺失值指示变量

pandas数据框对象可以直接调用方法isnull产生缺失值指示变量,例如产生score变量的缺失值指示变量:

sample.score.isnull()

0 False

1 True

2 False

3 False

4 False

5 True

Name: score, dtype: bool

若想转换为数值0,1型指示变量,可以使用apply方法,int表示将该列替换为int类型。

sample.score.isnull().apply(int)

0 0

1 1

2 0

3 0

4 0

5 1

Name: score, dtype: int64

03 噪声值处理


噪声值指数据中有一个或几个数值与其他数值相比差异较大,又称为异常值、离群值(outlier)。

对于大部分的模型而言,噪声值会严重干扰模型的结果,并且使结论不真实或偏颇,如图5-9。需要在数据预处理的时候清除所以噪声值。噪声值的处理方法很多,对于单变量,常见的方法有盖帽法、分箱法;多变量的处理方法为聚类法。下面进行详细介绍:

‘  ’

1. 盖帽法

盖帽法将某连续变量均值上下三倍标准差范围外的记录替换为均值上下三倍标准差值,即盖帽处理

在这里插入图片描述

Python中可自定义函数完成盖帽法。如下所示,参数x表示一个pd.Series列,quantile指盖帽的范围区间,默认凡小于百分之1分位数和大于百分之99分位数的值将会被百分之1分位数和百分之99分位数替代:

def cap(x,quantile=[0.01,0.99]):

“”"盖帽法处理异常值

Args:

x:pd.Series列,连续变量

quantile:指定盖帽法的上下分位数范围

“”"

生成分位数

Q01,Q99=x.quantile(quantile).values.tolist()

替换异常值为指定的分位数

if Q01 > x.min():

x = x.copy()

x.loc[x<Q01] = Q01

if Q99 < x.max():

x = x.copy()

x.loc[x>Q99] = Q99

return(x)

现生成一组服从正态分布的随机数,sample.hist表示产生直方图,更多绘图方法会在下一章节进行讲解:

sample = pd.DataFrame({‘normal’:np.random.randn(1000)})

sample.hist(bins=50)

在这里插入图片描述

对pandas数据框所有列进行盖帽法转换,可以以如下写法,从直方图对比可以看出盖帽后极端值频数的变化。

new = sample.apply(cap,quantile=[0.01,0.99])

new.hist(bins=50)

在这里插入图片描述

2. 分箱法

分箱法通过考察数据的“近邻”来光滑有序数据的值。有序值分布到一些桶或箱中。

分箱法包括等深分箱:每个分箱中的样本量一致;等宽分箱:每个分箱中的取值范围一致。直方图其实首先对数据进行了等宽分箱,再计算频数画图。

比如价格排序后数据为:4、8、15、21、21、24、25、28、34

将其划分为(等深)箱:

  • 箱1:4、8、15

  • 箱2:21、21、24

  • 箱3:25、28、34

将其划分为(等宽)箱:

  • 箱1:4、8

  • 箱2:15、21、21、24

  • 箱3:25、28、34

分箱法将异常数据包含在了箱子中,在进行建模的时候,不直接进行到模型中,因而可以达到处理异常值的目的。

pandas的qcut函数提供了分箱的实现方法,下面介绍如何具体实现。

**等宽分箱:**qcut函数可以直接进行等宽分箱,此时需要的待分箱的列和分箱个数两个参数,如下所示,sample数据的int列为从10个服从标准正态分布的随机数:

sample =pd.DataFrame({‘normal’:np.random.randn(10)})

sample

normal

0 0.065108

1 -0.597031

2 0.635432

3 -0.491930

4 -1.894007

5 1.623684

6 1.723711

7 -0.225949

8 -0.213685

9 -0.309789

现分为5箱,可以看到,结果是按照宽度分为5份,下限中,cut函数自动选择小于列最小值一个数值作为下限,最大值为上限,等分为五分。结果产生一个Categories类的列,类似于R中的factor,表示分类变量列。

此外弱数据存在缺失,缺失值将在分箱后将继续保持缺失,如下所示:

pd.cut(sample.normal,5)

0 (-0.447, 0.277]

1 (-1.17, -0.447]

2 (0.277, 1.0]

3 (-1.17, -0.447]

4 (-1.898, -1.17]

5 (1.0, 1.724]

6 (1.0, 1.724]

7 (-0.447, 0.277]

8 (-0.447, 0.277]

9 (-0.447, 0.277]

Name: normal, dtype: category

Categories (5, interval[float64]): [(-1.898, -1.17] < (-1.17, -0.447] < (-0.447, 0.277] < (0.277, 1.0] < (1.0, 1.724]]

这里也可以使用labels参数指定分箱后各个水平的标签,如下所示,此时相应区间值被标签值替代:

pd.cut(sample.normal,bins=5,labels=[1,2,3,4,5])

0 1

1 1

2 2

3 2

4 3

5 3

6 4

7 4

8 5

9 5

Name: normal, dtype: category

Categories (5, int64): [1 < 2 < 3 < 4 < 5]

标签除了可以设定为数值,也可以设定为字符,如下所示,将数据等宽分为两箱,标签为‘bad’,‘good’:

pd.cut(sample.normal,bins=2,labels=[‘bad’,‘good’])

0 bad

1 bad

2 bad

3 bad

4 bad

5 good

6 good

7 good

8 good

9 good

Name: normal, dtype: category

Categories (2, object): [bad < good]

等深分箱:等深分箱中,各个箱的宽度可能不一,但频数是几乎相等的,所以可以采用数据的分位数来进行分箱。依旧以之前的sample数据为例,现进行等深度分2箱,首先找到2箱的分位数:

sample.normal.quantile([0,0.5,1])

0.0 0.0

0.5 4.5

1.0 9.0

Name: normal, dtype: float64

在bins参数中设定分位数区间,如下所示完成分箱,include_lowest=True参数表示包含边界最小值包含数据的最小值:

pd.cut(sample.normal,bins=sample.normal.quantile([0,0.5,1]),

include_lowest=True)

0 [0, 4.5]

1 [0, 4.5]

2 [0, 4.5]

3 [0, 4.5]

4 [0, 4.5]

5 (4.5, 9]

6 (4.5, 9]

7 (4.5, 9]

8 (4.5, 9]

9 (4.5, 9]

Name: normal, dtype: category

Categories (2, object): [[0, 4.5] < (4.5, 9)]

此外也可以加入label参数指定标签,如下所示:

pd.cut(sample.normal,bins=sample.normal.quantile([0,0.5,1]),

include_lowest=True)

0 bad

1 bad

2 bad

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值