最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

Python数据分析案例之使用索引

XAMPP案例 admin 673浏览 0评论
这是Python数据分析基础系列的第二篇内容,本文将运用不同的例子进行详解Pandas索引的具体用法。
上一篇讲到,根据我观察身边的人为例子(包括我自己),在学习Pandas之后,感觉自己好像啥都会一点,但是到了实战的时候,想要选中特定的行和列太痛苦,网上的视频和书上教的方法太多,一时间不知道如何下手,完全没有使用Excel时候的爽感,想要选择行列只要点击鼠标就可以了,于是乎我们又会很快放弃用Python,重回Excel的怀抱。
上一篇介绍了一些最简单的列向索引,但对于我们日常工作中的数据清洗,显然是不够用的。这篇文章将会单独介绍索引,结合不同的使用场景介绍两种常用的索引方式:
  • 第一种是基于位置(整数)的索引,实际中偶有用到,应用范围但不如第二种广泛(粗略了解即可)。
  • 第二种是基于标签(行列名称)的索引,(这是重点),因为它将是进行数据清洗和分析的重要基石。
首先,简单了解一下案例数据:
er0000081
数据记录着不同流量来源下,各渠道来源明细所对应的访客数、支付转化率和客单价。
 

1.基于位置(整数)的索引

先看一看书上写的索引的操作方式:
df.iloc[where_i, where_j]
第一个参数是行索引,第二个参数是列索引。我们需要根据实际情况,填入对应的行参数和列参数(索引从0开始)。
  1. 1 行选取
目标:选择“流量来源”等于“一级”的所有行。
思路:数一数“流量来源”等于“一级”的行,从第1行到第13行,对应行索引是0-12,因为Python切片默认是含首不含尾的,要想选取0-12的索引行,我们得输入“0:13”。列数据我们想要全部选取,则输入“ : ”。
df.iloc[:13, :]
er082
  1. 2 列选取
目标:查看所有渠道的流量来源和客单价。
思路:所有流量渠道就是所有行,行参数为“:”,再看列,流量来源是第1列,客单价是第5列,对应的列索引分别是0和4。
需要注意的是,如果我们要跨列选取,得构造成列表形式,这里是[0,4],如果是连续选取,直接输入0:5(选取索引为0的列到索引为4的列)。
df.iloc[:13, [0, 4]]
er0082
  1. 3 行列交叉选取
目标:查询二级、三级流量来源、来源明细、访客数和支付转化率。
思路:二级三级渠道对应行索引是13到17,则行参数是13:18;列的话分别是前4列,传入参数0:4或者[0,1,2,3]。
df.iloc[13:17, 0:4]
er00082

2.基于标签(行列的名称)的索引

 

  2.1 场景一
目标:选择一级渠道的所有行。
思路:要筛选流量渠道为”一级”的所有行,先做一个判断,判断流量来源这一列,哪些值等于”一级”。
df['流量来源'] == '一级'
er000082
返回的结果为布尔类型。在loc方法中,我们可以把这一列判断值传入行参数,Pandas会默认返回结果为True的行,而结果为False的行不会显示出来。
df.loc[df['流量来源'] == '一级', :]
er0000082
  2. 2 场景二
目标:我们想要把所有渠道的流量来源和客单价单拎出来看一看。
思路:所有渠道等于所有行,我们在行参数位置直接输入“:”,要提取流量来源和客单价列,直接输入名称到列参数位置,由于这里涉及到两列,所以得用列表包起来:
df.loc[: ,['流量来源', '客单价'] ]
er81
  2. 3 场景三
目标:我们想要提取二级、三级流量来源、来源明细对应的访客和支付转化率。
思路:行提取用判断,列提取输入具体名称参数。
df.loc[df['流量来源'].isin(['二级', '三级']), ['流量来源', '来源明细', '访客数', '支付转化率']]
er081
isin()这个函数能够帮助我们快速判断源数据中某一列(Series)的值是否等于列表中的值。拿案例来说,df[‘流量来源’].isin([‘二级’,’三级’]),判断的是流量来源这一列的值,是否等于“二级”或者“三级”,如果等于(等于任意一个)就返回True,否则返回False。我们再把这个布尔型判断结果传入行参数,就能够很容易的得到流量来源等于二级或者三级的渠道。
  2. 4 场景四
目标:对于流量渠道数据,我们真正应该关注的是优质渠道,假如这里我们定义访客数、转化率、客单价都高于平均值渠道是优质渠道,那怎么找到这些渠道呢?
思路:优质渠道,得同时满足访客、转化、客单高于平均值这三个条件,这是解题的关键。
先看看均值各是多少,回顾一下上一篇内容。因为支付转化率这一列带有“%”,会被识别成字符串类型,因此要先进行预处理再计算。
df['支付转化率'] = df['支付转化率'].str.replace("%","").astype(float) / 100
print('访客数平均值:%.2f' % df['访客数'].mean())print('支付转化率平均值:%.2f' % df['支付转化率'].mean())print('客单价平均值:%.2f' % df['客单价'].mean())
er0081
再判断各指标列是否大于均值:
(df['访客数'] > df['访客数'].mean()) & (df['支付转化率'] > df['支付转化率'].mean()) & (df['客单价'] > df['客单价'].mean())
er00081
要三个条件同时满足,他们之间是一个“且”的关系,在pandas中,要表示同时满足,各条件之间要用”&”符号连接,条件内部最好用括号区分;如果是“或”的关系,则用“|”符号连接。
这样连接之后,返回True则表示该渠道同时满足访客、转化率、客单价都高于均值的条件,接下来我们只需要把这些值传入到行参数的位置。
df.loc[(df['访客数'] > df['访客数'].mean()) & (df['支付转化率'] > df['支付转化率'].mean()) & (df['客单价'] > df['客单价'].mean()), :]
er000081
到这一步,我们直接筛选出了4条关键指标都高于均值的优质渠道。
这两种索引方式,分别是基于位置(整数)的索引和基于标签(行列的名称)的索引,关键在于把脑海中想要选取的行和列,映射到对应的行参数与列参数中去
纸上得来终觉浅,绝知此事要躬行。我们的学习就像学习“开车”一样,其实并不难。但是想要真正掌握,像“老司机”一样开车,就需要更多的练习。只有更多的练习,才能随心所欲的用pandas处理和分析数据。

转载请注明:XAMPP中文组官网 » Python数据分析案例之使用索引

您必须 登录 才能发表评论!