当前位置: 首页 > news >正文

第五章-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。

相关文章:

  • Redis02-分布式session、缓存查询及缓存问题的解决
  • JavaWeb——AjaxJson
  • Spring-Cloud-Feign-03
  • 【深入Javascript闭包】
  • 词典
  • Spring Bean的生命周期
  • 秋招-致谢
  • 「实用工具—LICEcap」写博必备|动图制作|一键生成gif(GIF)
  • 3D目标检测(一)
  • 秋招面试- - -Java体系最新面试题(8)
  • 前端工程师面试题详解(四)
  • app端专项测试
  • 我操作MySQL的惊险一幕
  • 模糊预测股价走势
  • Qt之开源绘图控件QCustomPlot
  • angular学习第一篇-----环境搭建
  • Apache Zeppelin在Apache Trafodion上的可视化
  • Date型的使用
  • E-HPC支持多队列管理和自动伸缩
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • PHP 的 SAPI 是个什么东西
  • webpack4 一点通
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 大整数乘法-表格法
  • 基于Android乐音识别(2)
  • 前端工程化(Gulp、Webpack)-webpack
  • 少走弯路,给Java 1~5 年程序员的建议
  • 王永庆:技术创新改变教育未来
  • 阿里云移动端播放器高级功能介绍
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​什么是bug?bug的源头在哪里?
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #13 yum、编译安装与sed命令的使用
  • #if 1...#endif
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (zhuan) 一些RL的文献(及笔记)
  • (十八)SpringBoot之发送QQ邮件
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)使用VMware vSphere标准交换机设置网络连接
  • *上位机的定义
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .java 9 找不到符号_java找不到符号
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .net反编译工具
  • .NET连接数据库方式
  • .NET是什么
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @DataRedisTest测试redis从未如此丝滑
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心