提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
今天学习的是有关pandas的索引操作,接下来会穿插更新数学建模相关的知识,助力国赛!!
提示:以下是本篇文章正文内容,下面案例可供参考
一、 两种类型的索引
Pandas索引操作有两种常见的类型:
- 第一种是基于位置(整数)的索引,通过指定我们要选哪几行和哪几列,来筛选出目标数据。
- 第二种是基于名称(标签)的索引,既可以指定列具体的名称,又可以加上复杂的条件判断,筛选更加灵活。
在实际运用中,第一种索引偶尔会用到,应用范围不如第二种广泛,粗略的了解是为了我们能够看懂相关场景的代码。第二种索引则是我们学习的重点,因为它将是我们后面进行数据清洗和分析的重要基石。
1.基于位置的索引iloc
别忘了先导入数据噢
import pandas as pd
df = pd.read_excel('/home/mw/input/Pandas6120/流量练习数据.xls')
(有二三级数据,未完全展示)
1.1行选取
目标:选择“流量来源”等于“一级”的所有行。
思路:手指戳原始数据数一数,一级的渠道,是从第1行到第13行,对应行索引是0-12,但Python切片默认是含首不含尾的,要想选取0-12的索引行,我们得输入“0:13”。列如果要全部选取,则输入冒号“:”即代表所有列。
df.iloc[0:13,:]
结果:
1.2列选取
目标:我们想要把所有渠道的流量来源和客单价筛选出来。
思路:所有流量渠道,也就是所有行,在第一个行参数的位置我们输入“:”;再看列,流量来源是第1列,客单价是第5列,对应的列索引分别是0和4:
df.iloc[:,[0,4]]
值得注意的是,如果我们要跨列选取,得先把位置参数构造成列表形式,这里就是[0,4],如果是连续选取,则无需构造成列表,直接输入0:5(选取索引为0的列到索引为4的列)就好。
1.3行列交叉选取
目标:我们想要看一看二级、三级流量来源、来源明细对应的访客和支付转化率。
思路:先看行,二级三级渠道对应行索引是13:17,再次强调索引含首不含尾的原则,我们需要传入的行参数是13:18;列的话我们需要流量来源、来源明细、访客和转化,也就是前4列,传入参数0:4。
df.iloc[13:18,0:4]
2基于名称(标签)的索引loc
为了建立起横向对比的体感,我们先沿用上面三个场景,然后在这些基础上补充场景四。
2.1 基于loc的行选取
目标:选择一级渠道的所有行。
思路:这次我们不用一个个数位置了,要筛选流量渠道为"一级"的所有行,只需做一个判断,判断流量来源这一列,哪些值等于"一级"。
df.loc[df['流量来源'] == '一级',:]
2.2基于loc的列选取
df.loc[:,['流量来源','客单价']]
2.3 基于loc的交叉选取
目标:我们想要提取二级、三级流量来源、来源明细对应的访客和支付转化率。
思路:行提取用判断,列提取输入具体名称参数。
df.loc[df['流量来源'].isin(['二级','三级']),['流量来源','来源明细','访客数','支付转化率']]
isin函数能够帮助我们快速判断源数据中某一列(Series)的值是否等于列表中的值。
拿案例来说,df[‘流量来源’].isin([‘二级’,‘三级’]),判断的是流量来源这一列的值,是否等于“二级”或者“三级”,如果等于(等于任意一个)就返回True,否则返回False。我们再把这个布尔型判断结果传入行参数,就能够很容易的得到流量来源等于二级或者三级的渠道。
2.4 多条件索引
df.loc[(df['访客数'] > df['访客数'].mean()) &
(df['客单价'] > df['客单价'].mean()),:]
通过这样使用,就可以对表中的数据进行条件筛选。
总结
加油加油!