python数据分析与挖掘实战张良军_Python数据分析实战基础这是Python数据分析实战基础的第三篇内容,主要对前两篇进⾏补充,把实际数据清洗场景下常⽤但零散的⽅法,按增、删、查、分四板斧的逻辑进⾏归类,以减少记忆成本,提升学习和使⽤效率。
⾸先,导⼊案例数据集。因为案例数据存放在同⼀个Excel表的不同Sheet下,我们需要指定sheetname分别读取:
下⾯开始清洗的正餐。
01 增——拓展数据维度
1.1 纵向合并
这三个sheet的数据,维度完全⼀致(每列数据都是⼀样),纵向合并起来分析⼗分⽅便。说到纵向合并,concat⼤佬不请⾃来,他的招式简单明了——pd.concat([表1,表2,表3]),对于列字段统⼀的数据,我们只需把表依次传⼊参数:
concat⼤佬继续说到:“其实把我参数axis设置成1就可以横向合并.."说时迟那时快,我⼀个箭步冲上去捂住他的嘴巴“⽜逼的⼈做好⼀件事就够了,横向的就交给merge吧~”
⼩Z温馨提⽰:pandas中很多函数功能⼗分强⼤,能够实现多种功能,但对于萌新来说,过多甚⾄交叉的功能往往会造成懵B的状态,所以这⾥⼀种功能先只⽤⼀种⽅式来实现。
1.2 横向合并
横向合并涉及到连接问题,为⽅便理解,我们构造⼀些更有代表性的数据集练⼿:
两个DataFrame是两张成绩表,h1是5位同学的数学、英语、语⽂成绩,h2是4位同学的篮球和舞蹈成绩,现在想到并合并两张表同时出现的同学及其成绩,可以⽤merge⽅法:
我们来详解⼀下merge的参数,left和rgiht分别对应着需要连接的左表和右表,这⾥语数外成绩表是左表,篮球、舞蹈成绩是右表。
left_index与right_index是当我们⽤索引(这两个表的名字在索引中)连接时指定的参数,设置为on表⽰⽤该表的索引作为连接的条件(或者说桥梁)。假设姓名是单独的⼀列值,且需要根据姓名进⾏匹配,那就需要⽤“left_on = '姓名',right_on = '姓名'”,我们可以分别指定左表的匹配列和右表的匹配列。
how是指定连接⽅式,这⾥⽤的inner,表⽰我们基于姓名索引来匹配,只返回两个表中共同(同时出现)姓名的数据。下⾯详解⼀下inner还涉及到的其他参数——left,right,outer。
左右连接(left和right):
左连接(left)和右连接(right),我们可以直观理解为哪边的表是⽼⼤,谁是⽼⼤,就听谁的(所有⾏全部保持),先看左连接,左表h1原封不动,右边根据左表进⾏合并,如果存在相关的名字,就正常返回数据,如果不存在(韩梅梅、李雷),就返回空(NAN)值;右连接就是听右表的,左表有则返回⽆则为空。
外连接(outer):
外连接是两张表妥协的产物,我的数据全保留,你的也全保留,你有我⽆的就空着,你⽆我有的也空着。
02 删——删空去重
2.1 删空python怎么读取excel的数据
在⼀些场景,源数据的缺失(空值)对于分析来说是⼲扰项,需要系统的删除。上⽂我们合并后的df数据集就是有缺失数据的:
要删除空值,⼀个dropna即可搞定:
dropna函数默认删除所有出现空值的⾏,即只要⼀⾏中任意⼀个字段为空,就会被删除。我们可以设置subset参数,例如dropna(subset = ['city']),来指定当⼀⾏中的city字段为空时,才会被删除。
2.2 去重
说是讲去重,但是案例数据⽐较⼲净,没有两⾏数据是完全⼀样的,所以我们要制造点困难,增加⼏
⾏重复值:
把源数据重复两遍,赋值给repeat,这样每⼀⾏数据都有重复的数据。要把重复数据删掉,⼀⾏代码就搞定:
drop_duplicates⽅法去重默认会删掉完全重复的⾏(每个值都⼀样的⾏),如果我们要删除指定列重复的数据,可以通过指定subset参数来实现,假如我们有个奇葩想法,要基于“流量级别”这列进⾏去重,则可以:
我们会发现,流量有三个级别,通过指定subset参数,我们删除了这个字段重复的⾏,保留了各⾃不重复的第⼀⾏。继续展开讲,在源数据中,流量渠道为“⼀级”的有7⾏数据,每⾏数据其他字段都不相同,这⾥我们删除了后6⾏,只保留了第⼀⾏,但如果我们想在去重的过程中删除前⾯6⾏,保留最后⼀⾏数据怎么操作?答案很简单,指定keep参数即可。
keep值等于last,保留最后⼀⾏数据,不输⼊keep值时,系统默认会给keep赋值为first,就会保留第⼀⾏数据⽽删掉其他的。
03 查——基于条件查询
查,不是单纯的返回⼏⾏数据,⽽是根据业务实际需求,基于⼀定的条件查看和选择数据。
3.1 按条件索引/筛选
loc独⽩:你没有看错,哥的分量实在是太重了,所以⼜来抢个沙发,刷个脸熟。
这次需求是筛选出访客数⼤于10000的⼀级渠道,loc⼀下:
在⾏参数设置好同时满⾜访客数⼤于10000和流量级别等于“⼀级”这两个条件即可。
3.2 排序
很多情况下,我们都需要通过排序来观察数据规律,以及快速筛选出TOP N的数据项。对于案例数据,我们怎么样按交易⾦额进⾏排序并筛选出TOP3的渠道呢?
问题的关键就在于排序,这个时候sort_values函数就派上⽤场了:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论