Python Pandas索引 行列索引号的设置和修改
添加行列索引号
在Python中,如果表没有索引,会默认使用从0开始的自然数做索引。
通过给表df的columns 参数传入列索引值,index参数传入行索引值达到为无索引表添加索引的目的。
import pandas as pd df=pd.read_excel(r'C:\Users\Administrator\Desktop\Tableau柱形对比图&同比折线图\测试.xlsx') df.columns=["一","二","三","四"] df.index=[1,2,3,4,5,6] print(df)
结果:
一 二 三 四 1 A1 张通 101 2018-08-03 2 A2 李谷 102 2018-08-09 3 A3 孙凤 103 2018-08-10 4 A3 孙凤 103 2018-08-10 5 A4 赵恒 104 2018-08-11 6 A5 赵恒 104 2018-08-12
重置索引
重新设置索引
在Python中可以利用set_index() 方法重新设置索引列,在set_index()里指明要用作行索引的列的名称即可。
import pandas as pd df=pd.read_excel(r'C:\Users\Administrator\Desktop\Tableau柱形对比图&同比折线图\测试.xlsx') print(df) print("------------") print(df.set_index("订单编号")) print("------------") print(df.set_index("订单编号").index) print("------------") print(df.columns) print(df.index)
结果:
订单编号 客户姓名 唯一识别码 成交时间
0 A1 张通 101 2018-08-03
1 A2 李谷 102 2018-08-09
2 A3 孙凤 103 2018-08-10
3 A3 孙凤 103 2018-08-10
4 A4 赵恒 104 2018-08-11
5 A5 赵恒 104 2018-08-12
------------
客户姓名 唯一识别码 成交时间
订单编号
A1 张通 101 2018-08-03
A2 李谷 102 2018-08-09
A3 孙凤 103 2018-08-10
A3 孙凤 103 2018-08-10
A4 赵恒 104 2018-08-11
A5 赵恒 104 2018-08-12
------------
Index(['A1', 'A2', 'A3', 'A3', 'A4', 'A5'], dtype='object', name='订单编号') #订单编号是行索引总的名称。
Index(['订单编号', '客户姓名', '唯一识别码', '成交时间'], dtype='object')
RangeIndex(start=0, stop=6, step=1)
层次化索引
在重新设置索引时,还可以给set_index()方法传入两个或多个列名,我们把这种一个表中用多列来做索引的方式称为层次化索引。
层次化索引一般用在某一列中含有多个重复值的情况下。(相当于复合主键)。
import pandas as pd df=pd.read_excel(r'C:\Users\Administrator\Desktop\Tableau柱形对比图&同比折线图\测试.xlsx') print(df) print("------------") print(df.set_index(["客户姓名","订单编号"])) print("------------") print(df.set_index(["客户姓名","订单编号"]).index)
结果:
订单编号 客户姓名 唯一识别码 成交时间
0 A1 张通 101 2018-08-03
1 A2 李谷 102 2018-08-09
2 A3 孙凤 103 2018-08-10
3 A3 孙凤 103 2018-08-10
4 A4 赵恒 104 2018-08-11
5 A5 赵恒 104 2018-08-12
------------
唯一识别码 成交时间
客户姓名 订单编号
张通 A1 101 2018-08-03
李谷 A2 102 2018-08-09
孙凤 A3 103 2018-08-10
A3 103 2018-08-10
赵恒 A4 104 2018-08-11
A5 104 2018-08-12
------------
MultiIndex([('张通', 'A1'),
('李谷', 'A2'),
('孙凤', 'A3'),
('孙凤', 'A3'),
('赵恒', 'A4'),
('赵恒', 'A5')],
names=['客户姓名', '订单编号'])
重命名索引
重命名索引是针对现有索引名进行修改的,就是改字段名。
在Python中,我们利用rename()方法,在rename后的括号里指明要修改的行索引及列索引名。
import pandas as pd df=pd.read_excel(r'C:\Users\Administrator\Desktop\Tableau柱形对比图&同比折线图\测试.xlsx') print(df) print("------------") print(df.rename(columns={"订单编号":"新订单编号", "客户姓名":"新客户姓名"})) print("------------") print(df.rename(columns={"订单编号":"新订单编号", "客户姓名":"新客户姓名"}, index={0:"零",1:"一",2:"二",3:"三",4:"四",5:"五"})) #数字不加单引、双引包围符等,加了反而会识别不了出错。
结果:
订单编号 客户姓名 唯一识别码 成交时间 0 A1 张通 101 2018-08-03 1 A2 李谷 102 2018-08-09 2 A3 孙凤 103 2018-08-10 3 A3 孙凤 103 2018-08-10 4 A4 赵恒 104 2018-08-11 5 A5 赵恒 104 2018-08-12 ------------ 新订单编号 新客户姓名 唯一识别码 成交时间 0 A1 张通 101 2018-08-03 1 A2 李谷 102 2018-08-09 2 A3 孙凤 103 2018-08-10 3 A3 孙凤 103 2018-08-10 4 A4 赵恒 104 2018-08-11 5 A5 赵恒 104 2018-08-12 ------------ 新订单编号 新客户姓名 唯一识别码 成交时间 零 A1 张通 101 2018-08-03 一 A2 李谷 102 2018-08-09 二 A3 孙凤 103 2018-08-10 三 A3 孙凤 103 2018-08-10 四 A4 赵恒 104 2018-08-11 五 A5 赵恒 104 2018-08-12
重置索引
重置索引主要用在层次化索引表中,重置索引是将索引列当作一个columns进行返回。
在Python 利用的是reset_index()方法,reset_index()方法常用于数组、数据透视表中。reset_index()方法常用的参数如下:
reset_index(level=None,drop=False,inplace=False)
level参数用来指定要将层次化索引的第几级别转化为columns,第一个索引为0级,第二个索引为1级,默认为全部索引,即默认把索引全部转化为columns。
drop参数用来指定是否将原索引删掉,即不作为一个新的columns,默认为False,即不删除原索引。
inplace参数用来指定是否修改原数据表。
import pandas as pd df=pd.read_excel(r'C:\Users\Administrator\Desktop\Tableau柱形对比图&同比折线图\测试.xlsx') print(df) print("------------") dff=df.set_index(["订单编号","客户姓名"]) print(dff) print("------------") print(dff.reset_index()) #默认将全部index转化为columns
结果:
订单编号 客户姓名 唯一识别码 成交时间
0 A1 张通 101 2018-08-03
1 A2 李谷 102 2018-08-09
2 A3 孙凤 103 2018-08-10
3 A3 孙凤 103 2018-08-10
4 A4 赵恒 104 2018-08-11
5 A5 赵恒 104 2018-08-12
------------
唯一识别码 成交时间
订单编号 客户姓名
A1 张通 101 2018-08-03
A2 李谷 102 2018-08-09
A3 孙凤 103 2018-08-10
孙凤 103 2018-08-10
A4 赵恒 104 2018-08-11
A5 赵恒 104 2018-08-12
------------
订单编号 客户姓名 唯一识别码 成交时间
0 A1 张通 101 2018-08-03
1 A2 李谷 102 2018-08-09
2 A3 孙凤 103 2018-08-10
3 A3 孙凤 103 2018-08-10
4 A4 赵恒 104 2018-08-11
5 A5 赵恒 104 2018-08-12
import pandas as pd df=pd.read_excel(r'C:\Users\Administrator\Desktop\Tableau柱形对比图&同比折线图\测试.xlsx') print(df) print("------------") dff=df.set_index(["订单编号","客户姓名"]) print(dff) print("------------") print(dff.reset_index(level=0)) #将第0级索引转化为columns.
结果:
订单编号 客户姓名 唯一识别码 成交时间
0 A1 张通 101 2018-08-03
1 A2 李谷 102 2018-08-09
2 A3 孙凤 103 2018-08-10
3 A3 孙凤 103 2018-08-10
4 A4 赵恒 104 2018-08-11
5 A5 赵恒 104 2018-08-12
------------
唯一识别码 成交时间
订单编号 客户姓名
A1 张通 101 2018-08-03
A2 李谷 102 2018-08-09
A3 孙凤 103 2018-08-10
孙凤 103 2018-08-10
A4 赵恒 104 2018-08-11
A5 赵恒 104 2018-08-12
------------
订单编号 唯一识别码 成交时间
客户姓名
张通 A1 101 2018-08-03
李谷 A2 102 2018-08-09
孙凤 A3 103 2018-08-10
孙凤 A3 103 2018-08-10
赵恒 A4 104 2018-08-11
赵恒 A5 104 2018-08-12
import pandas as pd df=pd.read_excel(r'C:\Users\Administrator\Desktop\Tableau柱形对比图&同比折线图\测试.xlsx') print(df) print("------------") dff=df.set_index(["订单编号","客户姓名"]) print(dff) print("------------") print(dff.reset_index(drop=True)) #将原索引删除,不加入columns
结果:
订单编号 客户姓名 唯一识别码 成交时间
0 A1 张通 101 2018-08-03
1 A2 李谷 102 2018-08-09
2 A3 孙凤 103 2018-08-10
3 A3 孙凤 103 2018-08-10
4 A4 赵恒 104 2018-08-11
5 A5 赵恒 104 2018-08-12
------------
唯一识别码 成交时间
订单编号 客户姓名
A1 张通 101 2018-08-03
A2 李谷 102 2018-08-09
A3 孙凤 103 2018-08-10
孙凤 103 2018-08-10
A4 赵恒 104 2018-08-11
A5 赵恒 104 2018-08-12
------------
唯一识别码 成交时间
0 101 2018-08-03
1 102 2018-08-09
2 103 2018-08-10
3 103 2018-08-10
4 104 2018-08-11
5 104 2018-08-12
浙公网安备 33010602011771号