1.索引分类
索引是查找数据的依据,设置索引的目的是便于我们查找数据。
1.1普通索引
对dataframe数据结构而言,一般有两种索引。分别为普通索引和位置索引。
普通索引:其实就是名字,每一列数据都会有一个列名,每一行数据也可以设置一个行名
如图,对行而言,普通索引就是指首列一、二、三、四、五的内容;对列而言,普通索引就是指首行区域、省份、城市、时间、指标、权重这一行的内容
1.2位置索引
顾名思义,即数据所处在第几行第几列。对应的数字减去1就是其索引(因为说第几行第几列是从1开始算,而索引从0开始,故而需要减去1.否则就会取错数据。这里要引起注意)
注:位置索引是自带的,而普通索引不一定会有。有时候需要认为进行设定。
2.索引设置
无索引表的内容如下:
2.1 为无索引表添加索引
import pandas as pd
df = pd.read_excel(r'C:\Users\admin\Desktop\data_test.xlsx')
print("添加索引前:")
print(df)
df.index = ['一', '二', '三', '四']
df.columns = ['区域', '省份', '城市', '时间', '指标', '权重']
print("添加索引后:")
print(df)
result:
添加索引前:
东北 辽宁 大连 2019-09-06 00:00:00 12 0.78
0 西北 广东 西安 2019-09-07 87 0.65
1 华南 北京 深圳 2019-09-08 87 0.34
2 华北 湖北 北京 2019-09-09 45 1.23
3 华中 黑龙江 武汉 2019-09-10 21 8.90
添加索引后:
区域 省份 城市 时间 指标 权重
一 西北 广东 西安 2019-09-07 87 0.65
二 华南 北京 深圳 2019-09-08 87 0.34
三 华北 湖北 北京 2019-09-09 45 1.23
四 华中 黑龙江 武汉 2019-09-10 21 8.90
添加索引后的表格内容如下:
2.2重新设置索引
重新设置索引,一般是指行索引的设置。虽然有的表有索引,但不是我们想要的索引。就需要重新进行设置。
2.2.1 设置单列索引
df = pd.read_excel(r'C:\Users\admin\Desktop\data_test.xlsx')
print("重新设置索引前:")
print(df)
df.set_index("城市")
print("重新设置索引后:")
print(df)
result:
重新设置索引前:
区域 省份 城市 时间 指标 权重
0 西北 广东 西安 2019-09-07 87 0.65
1 华南 北京 深圳 2019-09-08 87 0.34
2 华北 湖北 北京 2019-09-09 45 1.23
3 华中 黑龙江 武汉 2019-09-10 21 8.90
重新设置索引后:
区域 省份 时间 指标 权重
城市
西安 西北 广东 2019-09-07 87 0.65
深圳 华南 北京 2019-09-08 87 0.34
北京 华北 湖北 2019-09-09 45 1.23
武汉 华中 黑龙江 2019-09-10 21 8.90
set_index()传入你要设置为索引的列名即可将对应的列设置为索引。
2.2.2 设置多列索引
一个表中用多列来做索引的方式我们称之为层次化索引。
df = pd.read_excel(r'C:\Users\admin\Desktop\data_test.xlsx')
print("重新设置索引前:")
print(df)
print("重新设置索引后:")
print(df.set_index(["区域", "省份"]))
result:
重新设置索引前:
区域 省份 城市 时间 指标 权重
0 西北 广东 西安 2019-09-07 87 0.65
1 华南 北京 深圳 2019-09-08 87 0.34
2 华北 湖北 北京 2019-09-09 45 1.23
3 华中 黑龙江 武汉 2019-09-10 21 8.90
重新设置索引后:
城市 时间 指标 权重
区域 省份
西北 广东 西安 2019-09-07 87 0.65
华南 北京 深圳 2019-09-08 87 0.34
华北 湖北 北京 2019-09-09 45 1.23
华中 黑龙江 武汉 2019-09-10 21 8.90
2.3 索引的重命名
重命名索引时参数需要按照{原索引名: 新索引名}这样的字典形式传入。
df = pd.read_excel(r'C:\Users\admin\Desktop\data_test.xlsx')
print("重新命名索引前:")
print(df)
print("重新命名索引后:")
print(df.rename(columns={"区域": "地区", "省份": "省"}))
result:
重新命名索引前:
区域 省份 城市 时间 指标 权重
0 西北 广东 西安 2019-09-07 87 0.65
1 华南 北京 深圳 2019-09-08 87 0.34
2 华北 湖北 北京 2019-09-09 45 1.23
3 华中 黑龙江 武汉 2019-09-10 21 8.90
重新命名索引后:
地区 省 城市 时间 指标 权重
0 西北 广东 西安 2019-09-07 87 0.65
1 华南 北京 深圳 2019-09-08 87 0.34
2 华北 湖北 北京 2019-09-09 45 1.23
3 华中 黑龙江 武汉 2019-09-10 21 8.90
注:一般最常用到的就是列索引了,这里以列索引作为例子进行讲述。行索引的做法与其一致,只需要将columns改为index就可以了。
2.4索引重置
重置索引主要用在层次化索引表中,重置索引是将索引列当做columns进行返回
让我们先来看看索引重置前的情形:
import pandas as pd
df = pd.read_excel(r'C:\Users\admin\Desktop\data_test.xlsx')
df2 = df.set_index(["区域", "城市"])
print(df2)
result:
省份 时间 指标 权重
区域 城市
西北 西安 广东 2019-09-07 87 0.65
华南 深圳 北京 2019-09-08 87 0.34
华北 北京 湖北 2019-09-09 45 1.23
华中 武汉 黑龙江 2019-09-10 21 8.90
print(df2.index)
result:
MultiIndex([('西北', '西安'), ('华南', '深圳'), ('华北', '北京'), ('华中', '武汉')],
names=['区域', '城市'])
可以看到,此时是一区域、城市这2列构成的层次索引。
索引重置主要利用了reset_index()方法,常用参数依次做如下说明:
level:用来指定要将层次化为索引的第几级别转化为columns。在层次化索引(也就是一个表有多个索引)中,第一个索引为0级,第二个为1级,其他依次类推。该参数默认将全部索引转化为columns。
drop:用来指定是否将索引删掉,即不作为一个新的columns,默认为False,即不删除原索引。
inplace:用来指定是否修改原数据表。
下面一一距离说明这几个参数的效果:
2.4.1 level参数
(1) 默认情形
df = pd.read_excel(r'C:\Users\admin\Desktop\data_test.xlsx')
df2 = df.set_index(["区域", "城市"])
print(df2.reset_index())
result:
区域 城市 省份 时间 指标 权重
0 西北 西安 广东 2019-09-07 87 0.65
1 华南 深圳 北京 2019-09-08 87 0.34
2 华北 北京 湖北 2019-09-09 45 1.23
3 华中 武汉 黑龙江 2019-09-10 21 8.90
print(df2.reset_index().index)
result:
RangeIndex(start=0, stop=4, step=1)
通过和重置索引签的对比,可以看到。索引重置后默认恢复到初始情形。即人为设置索引统统被删除。
(2) 指定值
df = pd.read_excel(r'C:\Users\admin\Desktop\data_test.xlsx')
df2 = df.set_index(["区域", "城市"])
print(df2.reset_index(level=0))
result:
区域 省份 时间 指标 权重
城市
西安 西北 广东 2019-09-07 87 0.65
深圳 华南 北京 2019-09-08 87 0.34
北京 华北 湖北 2019-09-09 45 1.23
武汉 华中 黑龙江 2019-09-10 21 8.90
print(df2.reset_index(level=0).index)
result:
Index(['西安', '深圳', '北京', '武汉'], dtype='object', name='城市')
和默认情形相比较,可以看到这里已经将区域这个索引给删除了。只留下了城市这一个索引。因此这个参数可以理解为存在多个索引时,你要删除哪个索引就将其值设置为数目减去1就好。比如我要删除第3个索引,那么这里level参数的值就是2了。
2.4.2 drop参数
df = pd.read_excel(r'C:\Users\admin\Desktop\data_test.xlsx')
df2 = df.set_index(["区域", "城市"])
print(df2.reset_index(drop=True))
result:
省份 时间 指标 权重
0 广东 2019-09-07 87 0.65
1 北京 2019-09-08 87 0.34
2 湖北 2019-09-09 45 1.23
3 黑龙江 2019-09-10 21 8.90
此时区域、城市这2列作为索引已经被删除了,所以打印出来的结果中缺失了这2列。