第五章-Python数据处理工具--Pandas

常用的数据清理方法:

数据处理的过程中,一般都要进行数据清洗,如数据集是否存在重复、是否存在缺失、数据是否具有完整性和一致性、数据中是否存在异常值等。当存在上述的问题时,就要进行有针对性地处理。

1.重复观测处理

检测数据集是否存在重复,可以使用duplicated进行验证,但是该方法返回的是每一行的验证结果,每行返回一个bool值,所以想要得到直接的结果,还需要再使用一个any函数。

在这里插入图片描述

然后进行删除重复项的操作:

在这里插入图片描述

缺失值处理:
一般有三种处理方法:删除法、替换法、插补法。

这里就以前两种方法为例:
在这里插入图片描述

两种删除法进行比较,

在这里插入图片描述

在这里插入图片描述

可以看到两者的区别,记录删除法是将所有含有缺失值的记录整条都删掉;变量删除是将表中缺失值最多的那个向量整个删掉。

替换法有四种方式:
向前替换:df.fillna(method=‘ffill’)
向后替换:df.fillna(method=‘bfill’)
常熟替换:df.fillna(value=0)
统计值替换:df.fillna(value={‘gender’:df.gender.mode()[0],‘age’:df.age.mean(),
‘income’:df.income.median()})

可以看到,用统计值替换看起来是最为合理的,例子中是性别用众数替换,年龄用均值替换,收入用中位数替换。

数据子集的获取:
有三种方式,iloc , loc , ix .
在这里插入图片描述
可以看到我们初始的表是这样子的,我们想拿到中间三排女生的数据,三种方式如下:
df1.iloc[1:4 , [0,2]]
df1.loc[1:3 , [‘name’,‘age’]]
df1.ix[1:3 , [0,2]]

iloc前面的是行号 ,取不到上限, 后面的是列号。
loc前面的是行号,取得到上限,后面是对应的列名称。
ix前面的是行号,取得到上限,后面既可以是列号也可以是列名称。

若没有行号,第一列直接以name开头的话。操作如下:

df2 = df1.set_index(‘name’)
df2.iloc[1:4 , :]
df2.loc[[‘李四’,‘王二’,‘丁一’],:]
df2.ix[1:4 , :]

对于iloc来说,不管什么样的数据集都可以使用行索引;
对于loc来说,不能使用行标签了,只能使用对应的行向量;
对于ix来说,行标签和行号都是可以的。

如果使用筛选条件的话,只能使用loc和ix两种方法。例如,上述的数据集想要选择所有男性的名字和年龄,操作如下:

df1.loc[df1.gender == ‘男’,[‘name’,‘age’]]
df1.ix[df1.gender == ‘男’,[‘name’,‘age’]]

表的连接:
merge函数:

pd.merge(left,right,how=‘inner’,on=None,left_on=None,right_on=None,
left_index=False,right_index=False,sort=False,suffixes=(‘_x’,‘_y’))

left : 指定需要连接的主表;
right : 指定需要连接的辅表;

how : 指定连接方式,默认为inner内连,还有其他包括left左连、right右连和outer外连。

on : 指定连接两张表的共同字段。
left_on : 指定主表中需要连接的共同字段;
right_on : 指定辅表中需要连接的共同字段;

left_index : bool类型,是否将主表中的行索引用作表连接的共同字段,默认为False。

right_index : bool类型,是否将辅表中的行索引用作表连接的共同字段,默认为False。

sort : bool类型参数,是否对链接后的数据按照共同字段排序,默认为False。
suffixes : 如果数据连接的结果中有重叠的变量名,则使用各自的前缀进行区分。

举个例子:

在这里插入图片描述

首先构建了三个表,现在我们想将这三张表连在一起,先连接3,4,再连接5:

在这里插入图片描述
,可以看到,因为df3 和 df4 的共同字段是不一致的,一个是id , 一个是Id , 所以这里left_on 和 right_on 要分开指定;

再连接df5:

在这里插入图片描述

这里会优先匹配共同字段id , 所以right_on 不用指定,对于无法匹配到的值,会自动补上NaN。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值