第三章、索引
一、索引器
1、表的列索引
形式:变量名[列名]或变量名.列名(列名中不含空格) –>取一列时
变量名[列名组成的列表]
In:import numpy as np
In:import pandas as pd
In:df=pd.read_csv('data/learn_pandas.csv',usecols=['School','Grade','Name','Gender','Weight','Transfer'])
In:df['Name'].head()
Out:
0 GaopengYang
1 ChangqiangYou
2 MeiSun
3 XiaojuanSun
4 GaojuanYou
Name:Name,dtype:object
df[['Gender','Name']].head()
Gender Name
0 Female GaopengYang
1 Male ChangqiangYou
2 Male MeiSun
3 Female XiaojuanSun
4 Male GaojuanYou
df.Name.head()
0 GaopengYang
1 ChangqiangYou
2 MeiSun
3 XiaojuanSun
4 GaojuanYou
Name:Name,dtype:object
2、序列的行索引
【a】以字符串为索引的Series
【b】以整数为索引的Series
3、loc索引器
(1)loc索引器一般形式:loc[,],其中第一个代表行的选择,第二个代表列,的位置一共有五类合法对象,分别是:
单个元素、
元素列表、
元素切片、
布尔列表
函数,
4、iloc索引器
iloc的使用与loc完全类似,只不过是针对位置进行筛选,在相应的位置处一共也有五类合法对象,分别是:整数、整数列表、整数切片、布尔列表以及函数。
(3)query方法
(4)随机抽样:(sample函数)
对样本或特征进行随机抽样就可以用sample函数。sample函数中的主要参数为n,axis,frac,replace,weights,前三个分别是指抽样数量、抽样的方向(0为行、1为列)和抽样比例(0.3则为从总体中抽出30%的样本)。replace和weights分别是指是否放回和每个样本的抽样相对概率,当replace=True则表示有放回抽样。
例如,对下面构造的df_sample以value值的相对大小为抽样概率进行有放回抽样,抽样数量为3。
In[64]:df_sample=pd.DataFrame({'id':list('abcde'),'value':[1,2,3,4,90]})
In[65]:df_sample
Out[65]:
id value
0 a 1
1 b 2
2 c 3
3 d 4
4 e 90
In[66]:df_sample.sample(3,replace=True,weights=df_sample.value)
Out[66]:
id value
4 e 90
4 e 90
4 e 90
4、多级索引及其表的结构
多级索引中的loc索引器:之前在第一节介绍的loc和iloc方法完全可以照搬,只需把标量的位置替换成对应的元组,不过在索引前最好对MultiIndex进行排序以避免性能警告:
5、IndexSlice对象
slice对象一共有两种形式,
第一种loc[idx[,]]型,
第二种为loc[idx[,],idx[,]]型,
6、多级索引的构造
常用的有
from_tuples:指根据传入由元组组成的列表进行构造
from_arrays:指根据传入列表中,对应层的列表进行构造
from_product:指根据给定多个列表的笛卡尔积进行构造
三种方法,它们都是pd.MultiIndex对象下的函数。
7、索引的常用方法
索引层的交换和删除索引层的交换由swaplevel和reorder_levels完成,前者只能交换两个层,而后者可以交换任意层,两者都可以指定交换的是轴是哪一个,即行索引或列索引:
若想要删除某一层的索引,可以使用droplevel方法:
8、索引属性的修改
通过rename_axis可以对索引层的名字进行修改,常用的修改方式是传入字典的映射:通过rename可以对索引的值进行修改,如果是多级索引需要指定修改的层号level:
9、索引的设置与重置
索引的设置可以使用 set_index 完成,这里的主要参数是 append ,表示是否来保留原来的索引,直接把新设定的添加到原索引的内层:
set_index的逆函数reset_index
In [148]: df_new = pd.DataFrame({'A':list('aacd'),
'B':list('PQRT'), 'C':[1,2,3,4]})
In [149]: df_new
Out[149]:
A B C
0 a P 1
1 a Q 2
2 c R 3
3 d T 4
In [150]: df_new.set_index('A')
Out[150]:
B C
A
a P 1
a Q 2
c R 3
d T 4
In [151]: df_new.set_index('A', append=True)
Out[151]:
B C
A
0 a P 1
1 a Q 2
2 c R 3
3 d T 4
10、索引的变形
所用函数有:reindex,reindex_like
11、索引运算