Pandas学习 - 索引

本文详细介绍了Pandas中索引的操作,包括单级索引的loc, iloc和[]操作符的用法,布尔索引,快速标量索引和区间索引。还探讨了多级索引的创建、切片和交换,以及索引设定、常用索引函数和重复元素处理。最后,提出了一些问题和练习供读者深入学习。" 88881404,8429710,Eclipse中配置Selenium jar包教程,"['selenium', 'Eclipse IDE', 'Java开发', '测试工具']
摘要由CSDN通过智能技术生成

写在前面

今天这部分我们要学习一下索引的操作。申明一下这个不是我自己编写的噢,是参加了Datawhale的组队学习,其中的成员GYH大神编写的joyful-pandas,可以取github上找到内容!(PS发现大神是同校的小学弟哈哈哈,真的很优秀,自己还要慢慢学习~)
如果有感兴趣的小伙伴可以github自取。


一、单级索引

1. loc方法、iloc方法、[]操作符
一般而言,最常用的索引方法就是这三类

  • iloc表示位置索引(i表示index)
  • loc表示标签索引
  • []也具有很大的便利性

(a)loc方法

trick one: 所有在loc中使用的切片全部包含右端点的,这一点和我们之前的右边不到不一样

①单行索引

# 标签索引为 1103 
# 也就是说如果行标签为字符型变量,那么df.loc['a']
df.loc[1103]

②多行索引

df.loc[[1102, 2304]]
df.loc[1304:]
df.loc[2402::-1] # 取从后向前的元素(从2402往前)

trick two: 类似小用法

import numpy as np
a=np.random.rand(5)
print(a)
[ 0.64061262  0.8451399   0.965673    0.89256687  0.48518743]
 
print(a[-1]) ## 取最后一个元素
[0.48518743]
 
print(a[:-1])  ## 除了最后一个取全部
[ 0.64061262  0.8451399   0.965673    0.89256687]
 
print(a[::-1]) ## 取从后向前(相反)的元素
[ 0.48518743  0.89256687  0.965673    0.8451399   0.64061262]
 
print(a[2::-1]) ## 取从下标为2的元素往前读取
[ 0.965673  0.8451399   0.64061262]

对于上面两种来说,默认是取出所有变量的数据的。

③单列索引

df.loc[:,'Height']

④多列索引

df.loc[:, ['Height','Math']] ## Height和Math两列
df.loc[:, 'Height':'Math'] ## Height到Math这三列

写出对应的变量名即可,记得要用[]括起来。

⑤联合索引

df.loc[1102:2401:3,'Height':'Math'].head()

在这里插入图片描述
这个索引的意思就是指首先按标签索引,1102到2401为区间,3为步长取数,其次取出Height到Math的这三列数据。

⑥函数式索引

# loc中使用的函数,传入参数就是前面的df
df.loc[lambda x:x['Gender']=='M'].head()

主要就是运用lambda函数对所有的记录进行遍历,找到符合条件的记录。

⑦布尔索引

# 语句一
df.loc[df['Address'].isin(['street_7','street_4'])].head()
# 语句二
## 这里是这样一个逻辑,首先遍历Address找到它的值,然后用i[-1]看是4还是7
df.loc[[True if i[-1]=='4' or i[-1]=='7' else False for i in df['Address'].values]].head()

(b)iloc方法

trick three: 注意与loc不同,切片右端点不包含

①单行索引

# 行位置为3的,也就是说从0开始,第四行
df.iloc[3]

②多行索引

# 第四行到第五行的记录
df.iloc[3:5]

③单列索引

df.iloc[:, 3].head()

在这里插入图片描述
这里我们看到都是按位置索引,位置为3,其实是第四列

④多列索引

# 这里的::-2是指所有列,然后步长为2,反向读取
df.iloc[:,7::-2].head()

在这里插入图片描述

df.iloc[:,7::-1].head()

在这里插入图片描述
⑤混合索引

df.iloc[3::4,7::-2]

⑥函数式索引

df.iloc[lambda x:[3]]

这个也是就是取位置为3的记录,即第四行

trick four: 由上所述,iloc中接收的参数只能为整数或整数列表,不能使用布尔索引

(c) []操作符

trick five: 如果不想陷入困境,请不要在行索引为浮点时使用[]操作符,因为在Series中的浮点[]并不是进行位置比较,而是值比较,非常特殊

(c.1)Series的[]操作

①单元素索引

# 使用索引标签
s = pd.Series(df['Math'], index=df.index)
# 找出索引标签为1101的Math值
s[1101]

索引标签的使用同前面

②多行索引

m = pd.Series(df['Height'], index=df.index)
m[2402::-1].head()

在这里插入图片描述
③函数式索引

s[lambda x: x.index[16::-6]]
# 注意使用lambda函数时,直接切片(如:s[lambda x: 16::-6])就报错,此时使用的不是绝对位置切片,而是元素切片,非常易错
# 注意是x.index

④布尔索引

s[s>80]
# 指值大于80的部分

(c.2)DataFrame的[]操作

①单行索引

df[1:2]
# 这里非常容易写成df['label'],会报错
# 用了标签位置的切片

# 如果想要获得某一个元素,可用如下get_loc方法:
row = df.index.get_loc(1102)
df[row:row+1]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值