
一、索引
索引/选择的基本语法如下:

import numpy as np
import pandas as pd
df = pd.read_csv('pandas/joyful-pandas-master/data/table.csv',index_col='ID')
df.head()

一、单级索引
1. loc方法、iloc方法、[]操作符
最常用的索引方法可能就是这三类,其中iloc表示位置索引,loc表示标签索引,[]也具有很大的便利性,各有特点
基于标签的索引
- .loc 是基于标签的索引,必须使用数据的标签属性,否则会返回一个异常。
- 基于标签索引的基本语法 : df.loc[行索引,列索引]
- 逗号之前是切取的行信息,逗号之后是切取的列信息
- 只切取行信息返回所有列信息的时候,列索引和逗号可以省略
- 只切取列信息返回所有行信息的时候,行索引和冒号不能省略,用冒号表示切取所有行.
(a)loc方法(注意:所有在loc中使用的切片全部包含右端点!)
① 单行索引:
df.loc[1103]

② 多行索引:
df.loc[[1102,2304]]

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()

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

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()

小节:本质上说,loc中能传入的只有布尔列表和索引子集构成的列表,只要把握这个原则就很容易理解上面那些操作.
(b)iloc方法(注意与loc不同,切片右端点不包含)
基于位置的索引
- .iloc 是基于位置的索引,传入的参数为目标区域的位置索引。
- 基于位置索引的基本语法 : df.iloc[行索引,列索引]
- 逗号之前是切取的行信息,逗号之后是切取的列信息
- 只切取行信息返回所有列信息的时候,列索引和逗号可以省略
- 只切取列信息返回所有行信息的时候,行索引和冒号不能省略,用冒号表示切取所有行.
直接切取一行信息的时候
- df[“行信息”:”行信息”] 返回是dataframe
- (基于标签的索引)df.loc[“行信息”] 返回的是series
① 单行索引:
df.iloc[3]

② 多行索引:
df.iloc[3:5]

③ 单列索引:
df.iloc[:,3].head()

④ 多列索引:
df.iloc[:,7::-2].head()

⑤ 混合索引:
df.iloc[3::4,7::-2].head()

⑥ 函数式索引:
df.iloc[lambda x:[3]].head()

小节:由上所述,iloc中接收的参数只能为整数或整数列表,不能使用布尔索引
(c) []操作符
如果不想陷入困境,请不要在行索引为浮点时使用[]操作符,因为在Series中的浮点[]并不是进行位置比较,而是值比较,非常特殊
(c.1)Series的[]操作
① 单元素索引:
s = pd.Series(df['Math'],index=df.index)
s[1101]
#使用的是索引标签
34.0
② 多行索引:
s[0:4]
# 使用的是绝对位置的整数切片,与元素无关,这里容易混淆

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

④ 布尔索引:
s[s>80]
版权声明:本文为weixin_34122532原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。