没有合适的资源?快使用搜索试试~ 我知道了~
第2章 索引 import numpy as np import pandas as pd df = pd.read_csv('data/table.csv',index_col='ID') df.head() School Class Gender Address Height Weight Math Physics ID 1101 S_1 C_1 M street_1 173 63 34.0 A+ 1102 S_1 C_1 F street_2 192 73 32.5 B+ 1103 S_1 C_1 M street_2 186 82 87.2
资源推荐
资源详情
资源评论
第第2章章 索引索引
第第2章章 索引索引
import numpy as np
import pandas as pd
df = pd.read_csv('data/table.csv',index_col='ID')
df.head()
School Class Gender Address Height Weight Math Physics
ID
1101 S_1 C_1 M street_1 173 63 34.0 A+
1102 S_1 C_1 F street_2 192 73 32.5 B+
1103 S_1 C_1 M street_2 186 82 87.2 B+
1104 S_1 C_1 F street_2 167 81 80.4 B-
1105 S_1 C_1 F street_4 159 64 84.8 B+
import numpy as np
import pandas as pd
df=pd.read_csv('data/table.csv',index_col='ID')
df.head()
School Class Gender Address Height Weight Math Physics
ID
1101 S_1 C_1 M street_1 173 63 34.0 A+
1102 S_1 C_1 F street_2 192 73 32.5 B+
1103 S_1 C_1 M street_2 186 82 87.2 B+
1104 S_1 C_1 F street_2 167 81 80.4 B-
1105 S_1 C_1 F street_4 159 64 84.8 B+
df.describe()
Height Weight Math
count 35.000000 35.000000 35.000000
mean 174.142857 74.657143 61.351429
std 13.541098 12.895377 19.915164
min 155.000000 53.000000 31.500000
25% 161.000000 63.000000 47.400000
50% 173.000000 74.000000 61.700000
75% 187.500000 82.000000 77.100000
max 195.000000 100.000000 97.000000
一、单级索引一、单级索引
1. loc方法、方法、iloc方法、方法、[]操作符操作符
最常用的索引方法可能就是这三类,其中最常用的索引方法可能就是这三类,其中iloc表示位置索引,表示位置索引,loc表示标签索引,表示标签索引,[]也具有很大的便利性,各有特点也具有很大的便利性,各有特点
((a))loc方法(注意:所有在方法(注意:所有在loc中使用的切片全部包含右端点!)中使用的切片全部包含右端点!)
① 单行索引:单行索引:
(注意:所有在(注意:所有在loc中使用的切片全部包含右端点!这是因为如果作为中使用的切片全部包含右端点!这是因为如果作为Pandas的使用者,那么肯定不太关心最后一个标签再往的使用者,那么肯定不太关心最后一个标签再往
后一位是什么,但是如果是左闭右开,那么就很麻烦,先要知道再后面一列的名字是什么,非常不方便,因此后一位是什么,但是如果是左闭右开,那么就很麻烦,先要知道再后面一列的名字是什么,非常不方便,因此Pandas中将中将loc
设计为左右全闭)设计为左右全闭)
df.loc[1103]
School S_1
Class C_1
Gender M
Address street_2
Height 186
Weight 82
Math 87.2
Physics B+
Name: 1103, dtype: object
df.loc[1101]
School S_1
Class C_1
Gender M
Address street_1
Height 173
Weight 63
Math 34
Physics A+
Name: 1101, dtype: object
② 多行索引:多行索引:
df.loc[[1102,2304]] df.loc[[1102,2201]]
School Class Gender Address Height Weight Math Physics
ID
1102 S_1 C_1 F street_2 192 73 32.5 B+
2201 S_2 C_2 M street_5 193 100 39.1 B
df.loc[1304:].head()
df.loc[1304:].head()
School Class Gender Address Height Weight Math Physics
ID
1304 S_1 C_3 M street_2 195 70 85.2 A
1305 S_1 C_3 F street_5 187 69 61.7 B-
2101 S_2 C_1 M street_7 174 84 83.3 C
2102 S_2 C_1 F street_6 161 61 50.6 B+
2103 S_2 C_1 M street_4 157 61 52.5 B-
df.loc[2402::-1].head()
df.loc[2402:2401:-1].head()
School Class Gender Address Height Weight Math Physics
ID
2402 S_2 C_4 M street_7 166 82 48.7 B
2401 S_2 C_4 F street_2 192 62 45.3 A
③ 单列索引:单列索引:
df.loc[:,'Height'].head()
df['Height'].head()
df.loc[1101:1102,'Height']
ID
1101 173
1102 192
Name: Height, dtype: int64
④ 多列索引:多列索引:
df.loc[:,['Height','Math']].head()
df.loc[:,['Height','Math']].head()
df[['Height','Math']].head()
Height Math
ID
1101 173 34.0
1102 192 32.5
1103 186 87.2
1104 167 80.4
1105 159 84.8
df.loc[:,'Height':'Math'].head()
df.loc[:,'Height':'Math'].head()
Height Weight Math
ID
1101 173 63 34.0
1102 192 73 32.5
1103 186 82 87.2
1104 167 81 80.4
1105 159 64 84.8
Height Weight Math
ID
⑤ 联合索引:联合索引:
df.loc[1102:2401:3,'Height':'Math'].head()
df.loc[1102:2201:3,'Height':'Math'].head()
df.loc[1102:2201:3,'Height':'Math':2].head()
Height Math
ID
1102 192 32.5
1105 159 84.8
1203 160 58.8
1301 161 31.5
1304 195 85.2
⑥ 函数式索引:函数式索引:
df.loc[lambda x:x['Gender']=='M'].head()
#loc中使用的函数,传入参数就是前面的df
df.loc[lambda x:x['Gender']=='M'].head()
df[df['Gender']=='M'].head()
School Class Gender Address Height Weight Math Physics
ID
1101 S_1 C_1 M street_1 173 63 34.0 A+
1103 S_1 C_1 M street_2 186 82 87.2 B+
1201 S_1 C_2 M street_5 188 68 97.0 A-
1203 S_1 C_2 M street_6 160 53 58.8 A+
1301 S_1 C_3 M street_4 161 68 31.5 B+
#这里的例子表示,loc中能够传入函数,并且函数的输入值是整张表,输出为标量、切片、合法列表(元素出现在索引中)、合法索引
def f(x):
return [1101,1103] df.loc[f] def lam(x):
return x['Gender']=='M'
df.loc[lam].head()
def f(x):
return [1101,1103] df.loc[f]
School Class Gender Address Height Weight Math Physics
ID
1101 S_1 C_1 M street_1 173 63 34.0 A+
1103 S_1 C_1 M street_2 186 82 87.2 B+
⑦ 布尔索引(将重点在第布尔索引(将重点在第2节介绍)节介绍)
df.loc[df['Address'].isin(['street_7','street_4'])].head()
df.loc[df['Address'].isin(['street_7','street_4'])].head()
School Class Gender Address Height Weight Math Physics
ID
1105 S_1 C_1 F street_4 159 64 84.8 B+
1202 S_1 C_2 F street_4 176 94 63.5 B-
1301 S_1 C_3 M street_4 161 68 31.5 B+
1303 S_1 C_3 M street_7 188 82 49.7 B
2101 S_2 C_1 M street_7 174 84 83.3 C
df.loc[[True if i[-1]=='4' or i[-1]=='7' else False for i in df['Address'].values]].head()
df.loc[[True if i[-1]=='4'or i[-1]=='7' else False for i in df['Address'].values]].head()
School Class Gender Address Height Weight Math Physics
ID
1105 S_1 C_1 F street_4 159 64 84.8 B+
1202 S_1 C_2 F street_4 176 94 63.5 B-
1301 S_1 C_3 M street_4 161 68 31.5 B+
1303 S_1 C_3 M street_7 188 82 49.7 B
2101 S_2 C_1 M street_7 174 84 83.3 C
小节:本质上说,小节:本质上说,loc中能传入的只有布尔列表和索引子集构成的列表,只要把握这个原则就很容易理解上面那些操作中能传入的只有布尔列表和索引子集构成的列表,只要把握这个原则就很容易理解上面那些操作
((b))iloc方法(注意与方法(注意与loc不同,切片右端点不包含)不同,切片右端点不包含)
① 单行索引:单行索引:
df.iloc[3] df.iloc[0] # df.iloc[[0,3]]
School S_1
Class C_1
Gender M
Address street_1
Height 173
Weight 63
Math 34
Physics A+
Name: 1101, dtype: object
② 多行索引:多行索引:
df.iloc[[0,3]]
School Class Gender Address Height Weight Math Physics
ID
1101 S_1 C_1 M street_1 173 63 34.0 A+
1104 S_1 C_1 F street_2 167 81 80.4 B-
df.iloc[3:5] #df.iloc[5:3:-1]
School Class Gender Address Height Weight Math Physics
ID
1104 S_1 C_1 F street_2 167 81 80.4 B-
1105 S_1 C_1 F street_4 159 64 84.8 B+
df.iloc[4:2:-1]
School Class Gender Address Height Weight Math Physics
ID
1105 S_1 C_1 F street_4 159 64 84.8 B+
1104 S_1 C_1 F street_2 167 81 80.4 B-
③ 单列索引:单列索引:
df.iloc[:,3].head()
# df.iloc[0,0] # df.iloc[:,0:3].head()
ID
1101 street_1
1102 street_2
1103 street_2
1104 street_2
1105 street_4
Name: Address, dtype: object
④ 多列索引:多列索引:
df.iloc[:,7::-2].head()
df.iloc[:,7::-2].head()
Physics Weight Address Class
ID
1101 A+ 63 street_1 C_1
1102 B+ 73 street_2 C_1
1103 B+ 82 street_2 C_1
1104 B- 81 street_2 C_1
1105 B+ 64 street_4 C_1
Physics Weight Address Class
ID
⑤ 混合索引:混合索引:
df.iloc[3::4,7::-2].head()
df.iloc[3::4,7::-2]
Physics Weight Address Class
ID
1104 B- 81 street_2 C_1
1203 A+ 53 street_6 C_2
1302 A- 57 street_1 C_3
2101 C 84 street_7 C_1
2105 A 81 street_4 C_1
2204 B- 74 street_1 C_2
2303 C 99 street_7 C_3
2402 B 82 street_7 C_4
⑥ 函数式索引:函数式索引:
df.iloc[lambda x:[3]].head()
df.iloc[lambda x:[3]].head()
df.iloc[[i for i in range(5)]] def f(x):
temp=[] index=0
for i in x['Physics'].values:
if i =='A+':
temp.append(index)
index+=1
return temp
df.iloc[f] #type(df['Physics'].values)
#type(df['Physics']=='A+')
df.iloc[list(df['Physics']=='A+')]#纯布尔Series会报错,将布尔转成list就可以了
School Class Gender Address Height Weight Math Physics
ID
1101 S_1 C_1 M street_1 173 63 34.0 A+
1203 S_1 C_2 M street_6 160 53 58.8 A+
2203 S_2 C_2 M street_4 155 91 73.8 A+
小节:小节:iloc中接收的参数只能为整数或整数列表或布尔列表,不能使用布尔中接收的参数只能为整数或整数列表或布尔列表,不能使用布尔Series,如果要用就必须如下把,如果要用就必须如下把values拿出来拿出来
#df.iloc[df['School']=='S_1'].head() #报错
df.iloc[(df['School']=='S_1').values].head()
#type((df['School']=='S_1').values)
School Class Gender Address Height Weight Math Physics
ID
1101 S_1 C_1 M street_1 173 63 34.0 A+
1102 S_1 C_1 F street_2 192 73 32.5 B+
1103 S_1 C_1 M street_2 186 82 87.2 B+
1104 S_1 C_1 F street_2 167 81 80.4 B-
1105 S_1 C_1 F street_4 159 64 84.8 B+
((c)) []操作符操作符
如果不想陷入困境,请不要在行索引为浮点时使用如果不想陷入困境,请不要在行索引为浮点时使用[]操作符,因为在操作符,因为在Series中的浮点中的浮点[]并不是进行位置比较,而是值比较,非并不是进行位置比较,而是值比较,非
常特殊常特殊
((c.1))Series的的[]操作操作
① 单元素索引:单元素索引:
s = pd.Series(df['Math'],index=df.index)
s[1101] #使用的是索引标签
s=pd.Series(df['Math'],index=df.index)
s[1101] # t=df['Math'] # t[1101]
剩余31页未读,继续阅读
资源评论
weixin_38557095
- 粉丝: 2
- 资源: 930
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功