Datawhale pandas 打卡03 索引

内容介绍

这是第三篇打卡文章。

索引器

表的列索引

取单列数据

df['Name'].head()

取多列数据

df[['Gender', 'Name']].head()

loc索引器

loc的基本用法是df.loc[*]以及df.loc[*,*]
*可以替换为多种形式
df.loc[*]是选出部分行以及所有列
df.loc[*,*]是选出部分行和部分列
在这里插入图片描述
使用示例表格如上,名字作为行索引

类型 示例 备注
单个元素 df_demo.loc['Qiang Sun']以及df_demo.loc['Qiang Sun', 'School']
元素列表 df_demo.loc[['Qiang Sun','Quan Zhao'], ['School','Gender']]
元素切片 df_demo.loc['Gaojuan You':'Gaoqiang Qian', 'School':'Gender'] 此时端点两侧需要是唯一的
布尔列表 df_demo.loc[df_demo.Weight>70].head()
函数 df_demo.loc[lambda x:'Quan Zhao', lambda x:'Gender'] 可以自定义函数,也可以是用匿名函数,但是返回值需要是前面四种形式

iloc索引器

iloc的使用与loc完全类似,只不过是针对位置进行筛选,在相应的*位置处一共也有五类合法对象,分别是:整数、整数列表、整数切片、布尔列表以及函数,函数的返回值必须是前面的四类合法对象中的一个,其输入同样也为DataFrame本身。

类型 示例 备注
整数 df_demo.iloc[1, 1] 第二行第二列
整数列表 df_demo.iloc[[0, 1], [0, 1]] 前两行前两列
整数切片 df_demo.iloc[1: 4, 2:4] 切片不包含结束端点
布尔列表 df_demo.iloc[(df_demo.Weight>80).values].head() 不能传入Series而必须传入序列的values
函数 df_demo.iloc[lambda x: slice(1, 4)] 传入切片为返回值的函数

query方法

query利用传入字符串的形式查询表中数据,可以直接使用列名。当列名带空格时,需要使用`列名`。条件的连接直接需要使用and,or,in,not in,同时条件要用括号括起来

# 筛选体重大于平均值的行
df.query('Weight > Weight.mean()').head()

out:
在这里插入图片描述

随机抽样

当我们处理大型数据,想要使用聚合函数得到数据的统计学特征时,如果直接计算,时间开销太大,于是我们需要去使用抽样方法来作为整个数据的统计特征的一个近似。
所以我们使用sample方法,它的重要参数有n, axis, frac, replace, weights

参数 作用
n 抽样数量
axis 抽样的方向,0为行、1为列
frac 抽样比例
replace 是否是有放回抽样
weights 每个样本的抽样概率
df_sample = pd.DataFrame({
   'id': list('abcde'), 'value': [1, 2, 3, 4, 90]})
print(df_sample)
print('抽样结果')
# 利用value列做为抽样概率权重
df_sample.sample(3, replace = False, weights = df_sample.value)

out:

  id  value
0  a      1
1  b      2
2  c      3
3  d      4
4  e     90
抽样结果
  id  value
4  e     90
1  b      2
3  d      4

多级索引

多级索引以及表的结构

在这里插入图片描述
我们可以看到多级索引可以是行索引,也可以是列索引,在行索引是school,gender,列索引是Indicator,Grade,所以索引不再是一个单独的元素,而是由对应元素构成的元组

多级索引的相关属性

相关属性有names,values在这里插入图片描述
如果想要获得某一层的索引,利用get_level_values()得到某一层的索引

多层索引中的loc

多层索引的loc方法与单层索引没有很大区别,只需要吧单独的元素换成一个元组。同时还需要注意的是筛选时要对索引进行排序,提高效率,避免警告。

# 利用set_index方法设置多重索引
df_multi = df.set_index(['School', 'Grade'])
# 先对数据进行排序,然后才能筛选
df_sorted = df_multi.sort_index()
df_sorted.loc[('Fudan University', 'Junior')].head()

在这里插入图片描述

同时还有一种特殊的用法,可以利用对各层的元素进行笛卡尔积的结果进行筛选

res = df_multi
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值