Python数据分析学习笔记三--Pandas数据清洗

前言

上一次我们已经学习了Pandas的基础知识,接下来让我们一起继续探索Pandas的魅力吧~ - ~
第一步当然是导入相应的库啦!
import numpy as np
import pandas as pd
from pandas import DataFrame
好了,让我们开始这次清洗活动吧。GOGOGO!!!

1 pandas处理空值

首先我们先定义一个名叫df的二维数组,并把它的第3行第4列变为none,这在我们平常的数据中会时常出现,还有把它的第3行第4列变为np.nan

ps:后面附加的内容会介绍none和np.nan,最主要的区别是一个有自己的类型,而另外一个没有

df = DataFrame(data = np.random.randint(1,100,(4,5)))
df.iloc[2,3] = None
df.iloc[3,4] = np.nan
df

在这里我们就能看到df实际上是一张表,跟excel表格差不多,里面有我们刚才存进去的none和np.nan都变成了NaN值,意味着都为空

01234
085633597.032.0
15291306.040.0
2336396NaN9.0
333356881.0NaN

1.1 删除所在的空行

-----方式1-------了解

# 使用notnull函数检测是否为非空    
# 使用all某一行或者列全为True则返回True
df.notnull().all(axis=1)
0     True
1     True
2    False
3    False
dtype: bool

通过上面的结果可以很清楚地看到第3,4行存在空值

# loc函数根据指定的布尔值为True来提取数据所在的行
df.loc[df.notnull().all(axis=1)]

这样我们就去除了空行

01234
085633597.032.0
15291306.040.0

-----方式2-------了解

# 使用isnull:检测是否为空    
# any:某一行或者列有一个True则返回True
df.loc[-df.isnull().any(axis=1)]
01234
085633597.032.0
15291306.040.0

-----方式3------- 推荐

#dropna函数:默认删除dataframe中所有带空值的行
df.dropna(axis = 0) 
01234
085633597.032.0
15291306.040.0
1.2 将空值填充(近值)

使用fillna函数来填充
设置不同的参数实现不同方式的冲突

#向前填充
df.fillna(method = 'ffill',axis = 0)  
#向后填充
df.fillna(method = 'bfill',axis = 0)
#向前后填充
df.fillna(method = 'bfill',axis = 0).fillna(method = 'ffill',axis = 0)  
01234
085633597.032.0
15291306.040.0
23363966.09.0
333356881.09.0
1.3 现实应用优先级
删除> 填充,但是要看实际的应用场景来判断

2 pandas处理重复数据

跟前面一样,生成一个二维数组da,将第1,2行所有数值设置为重复值6

da = DataFrame(data = np.random.randint(1,100,(4,5)))
da.iloc[1] =  6
da.iloc[2] =  6
da
01234
0978689644
166666
266666
36079396083

解决方法:
使用drop_duplicates函数来删除重复的行,last: 删除重复项,除了最后一次出现,也可以使用first来保存第一次出现的数据

da.drop_duplicates(keep='last')
01234
0978689644
266666
36079396083

3 pandas处理异常数据

异常值的出现可能由于数据源或者操作不当引起的,下面是一个小例子来说明:
规定:生成一个二维数组dc,dc数组的c列的值大于a列和b列的值的一半则为异常数据

dc = DataFrame(data = np.random.randint(1,100,(100,3)),columns=['a','b','c'])
dc
abc
0157857
1671149
286363
3237487
4812166
............
9549331
96655875
97966652
98955346
9915226

100 rows × 3 columns

判定方法:
1.先算出a列和b列的平均值twice_std
2.将算出的值与c列的值比较,如果为True则使用loc函数取出来

# 判定异常值
twice_std = (dc['a'] + dc['b'])/2
dc['c'] > twice_std
dc.loc[dc['c'] > twice_std]
abc
0157857
1671149
286363
3237487
4812166
1319264
14472497
16263096
18299566
19353157
22807593
24121352
25631494
26645699
28735282
29108668
3023786
31309287
3451956
3571348
3716360
39642856
43804262
46884892
4913736
55195779
56667194
57163035
5877490
65152690
69245861
72292534
74352467
7574692
76725666
77466776
80592483
8522483
8929498
91162652
96655875
9915226
通过上面的表格可以看到行数明显减少了

4.附加内容:none和np.nan的区别

type(None) # 不可以运算
NoneType
type(np.NAN) #可以运算
float
好了,今天pandas的数据清洗先学到这里啦,希望对你的实际使用中有所帮助,记得关注小编继续学习下一篇我们andas相对高级的用法,每天进步一点点。喜欢这篇文章记得点赞评论呀!!!
另附上

numpy学习笔记:

https://blog.csdn.net/weixin_45127640/article/details/106696613

pandas基础知识

https://blog.csdn.net/weixin_45127640/article/details/106988744

有需求的同学可以继续学习呀!冲鸭!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值