pandas学习第2章--索引

本文详细介绍了pandas中的索引操作,包括单级索引的loc、iloc和[]操作符,多级索引的创建和切片,以及布尔索引、快速标量索引和区间索引的使用。同时讲解了设置和重置索引的方法,如set_index、reset_index以及rename_axis。此外,还探讨了如何处理重复元素和抽样函数sample的使用。
摘要由CSDN通过智能技术生成

导入库、读取文件

import numpy as np
import pandas as pd
df = pd.read_csv('data/table.csv',index_col='ID')#将索引为ID的列作为行索引
df.head()

读取前5行

一、单级索引

1.loc方法、iloc方法、[]操作符

最常用的索引方法可能就是这三类,其中iloc表示位置索引,loc表示标签索引,[]操作符有很大的便利性

(1)loc方法(所有在loc中使用的切片全部包含右端点)

本质上说,loc中能传入的只有布尔列表和索引子集构成的列表,只要把握这个原则就很容易理解下面的操作

单行索引

df.loc[1103]#获取指定行

多行索引

df.loc[[1102,2304]]#获取2个指明索引的行

df.loc[1304:].head()#获取从指定索引开始后的多行

df.loc[2402::-1].head()#获取从指定索引开始往上数的多行

单列索引

df.loc[:,'Height'].head()#获取指定列

多列索引

df.loc[:,['Height','Math']].head()#获取指定列索引的列

df.loc[:,['Height''Math']].head()#获取指定列索引之间的列

联合索引

#在指定索引之间的行,每三行取一行;指定索引之间的列
df.loc[1102:2401:3,'Height':'Math'].head()

函数式索引

#loc中使用的函数,传入参数就是前面的df
df.loc[lambda x:x['Gender']=='M'].head()#先将Gender列中的内容替换为M
def f(x):
    return [1101,1103]
df.loc[f]

布尔索引(重点在第2节介绍)

df.loc[df['Address'].isin(['street_7','street_4'])].head()

df.loc[[True if i[-1]=='4' or i[-1]=='7' else False for i in df['Address'].values]].head()

(2)iloc方法(注意与loc不同,切片右端点不包含)

iloc中接收的参数只能为整数或整数列表,不能使用布尔索引

单行索引

df.iloc[3] #索引从0开始,获取第4

多行索引

df.iloc[3:5]#获取4-5行,切片右端点不包含,即没有第6

单列索引

df.iloc[:,3].head()#索引从0开始,获取第4

多列索引

df.iloc[:,7::-2].head()#从第8例开始,从右往左每2

混合索引

df.iloc[3::4,7::-2].head()#从第4行开始,每隔4行;从第8例开始,从右往左每2

函数式索引

df.iloc[lambda x:[3]].head()#获取第4

(3)[]操作符

请不要在行索引为浮点时使用[]操作符,因为在Series中的浮点[]并不是进行位置比较,而是值比较,非常特殊

一般来说,[]操作符常用于列选择或布尔选择,尽量避免行的选择

(3.1)Series的[]操作

单元素索引

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

多行索引

#使用的是绝对位置的整数切片,与元素无关,这里容易混淆
s[0:4]

函数式索引

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

布尔索引

s[s>80]#大于80的为真

(3.2)DataFrame的[]操作

单行索引

df[1:2]#获取第2
#这里非常容易写成df['label'],会报错
#同Series使用了绝对位置切片
#如果想要获得某一个元素,可用get_loc方法:
row = df.index.get_loc(1102)
df[row:row+1]

多行索引

#用切片,如果是选取指定的某几行,推荐使用loc,否则很可能报错
df[3:5]#获取4-5

单列索引

df['School'].head()#一个Series

多列索引

df[['School','Math']].head()#获取指定索引的2

函数式索引

df[lambda x:['Math','Physics']].head()#获取指定索引的2

布尔索引

df
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值