小呆学数据分析——pandas中的层次化索引

层次化索引应用场景
例子

王小呆的女朋友李小妹是高三老师,高考结束可以查分后,李小妹让班级里面的同学将查分结果汇总给她,形式都是 张三.csv、李四.csv、王五.csv,内容如下:
张三.csv

姓名,科目,分数
张三,英语,128
张三,语文,110
张三,数学,125
张三,理综,238

李四.csv

姓名,科目,分数
李四,英语,108
李四,语文,98
李四,数学,135
李四,理综,245

王五.csv

姓名,科目,分数
王五,英语,135
王五,语文,105
王五,数学,140
王五,理综,256

李小妹看到这一系列的文件,有点犯愁,于是给小呆交代了一项任务,把这些文件的内容做成一张包含姓名各科成绩的表格。

小呆默默的打开python,先想把这些数据导进去再说,于是写下代码

import pandas as pd
std1 = pd.read_csv('张三.csv', encoding = 'gb2312')
print(std1)

结果报错,小呆想到张三.csv文件和上两次的文件不一样,这是中文名命名的文件,所以是不是需要做点什么变化,而且要将科目作为索引,应该怎么做呢?小呆请教了小瓜,小瓜写下代码

std1 = pd.read_csv('张三.csv', encoding = 'gb2312', engine = 'python', index_col = '科目')
print(std1)

结果如下

        分数
姓名 科目     
张三 英语  128
   语文  110
   数学  125
   理综  238

连续导入李四.csv、王五.csv。并利用上次的堆叠技术将他们组合成一个数据块。于是小呆写下代码

std = pd.concat([std1, std2, std3])
print(std)

结果如下:

        分数
姓名 科目     
张三 英语  128
   语文  110
   数学  125
   理综  238
李四 英语  108
   语文   98
   数学  135
   理综  245
王五 英语  135
   语文  105
   数学  140
   理综  256

做到这里小呆想起来小瓜说过的层次化索引就是这个吧,我可以通过外索引直接索引一个数据块,于是小呆写下代码

print(std['李四'])

运行结果报错KeyError。小呆问小瓜什么情况。对于这种情况(注①)不能直接和列表切片索引一样的方式进行索引,而要采用loc方法才能正确进行索引。小瓜写下一行代码

print(std.loc[('李四')])

结果如下:

     分数
科目     
英语  108
语文   98
数学  135
理综  245

小呆想着怎么把这样一绺的数据转换成表格呢?他想起小瓜说起过stack和unstack方法。于是他写下代码

print(std.unstack())

结果如下:

             分数               
科目   数学   理综   英语   语文
姓名                    
张三  125  238  128  110
李四  135  245  108   98
王五  140  256  135  105

小呆看到结果想想,原来这个unstack方法好像是把最内层的行索引旋转成列索引了,然后列内容按照指定的索引添满。
那么stack方法一定是将列索引旋转重排成行索引,然后按指定的索引添满相对应的值。为了验证想法,小呆写下代码

std4 = std.unstack()
print(std4.stack())

结果如下:

        分数
姓名 科目     
张三 数学  125
   理综  238
   英语  128
   语文  110
李四 数学  135
   理综  245
   英语  108
   语文   98
王五 数学  140
   理综  256
   英语  135
   语文  105

果真如此,小呆将结果std4交给了小妹。

注①:这个情况是什么情况呢?小呆还是想不通,小瓜告诉小呆,当是DataFrame格式的数据时,要用loc函数来进行行索引。

文章导引列表:
机器学习
  1. 小瓜讲机器学习——分类算法(一)logistic regression(逻辑回归)算法原理详解
  2. 小瓜讲机器学习——分类算法(二)支持向量机(SVM)算法原理详解
  3. 小瓜讲机器学习——分类算法(三)朴素贝叶斯法(naive Bayes)
  4. 小瓜讲机器学习——分类算法(四)K近邻法算法原理及Python代码实现
  5. 小瓜讲机器学习——分类算法(五)决策树算法原理及Python代码实现
  6. 小瓜讲机器学习——聚类算法(一)K-Means算法原理Python代码实现
  7. 小瓜讲机器学习——聚类算法(二)Mean Shift算法原理及Python代码实现
  8. 小瓜讲机器学习——聚类算法(三)DBSCAN算法原理及Python代码实现

数据分析
  1. 小呆学数据分析——使用pandas中的merge函数进行数据集合并
  2. 小呆学数据分析——使用pandas中的concat函数进行数据集堆叠
  3. 小呆学数据分析——pandas中的层次化索引
  4. 小呆学数据分析——使用pandas的pivot进行数据重塑
  5. 小呆学数据分析——用duplicated/drop_duplicates方法进行重复项处理
  6. 小呆学数据分析——缺失值处理(一)
  7. 小呆学数据分析——异常值判定与处理(一)
  8. 小瓜讲数据分析——数据清洗

数据可视化
  1. 小瓜讲数据分析——数据可视化工程(matplotlib库使用基础篇)
  2. 小瓜讲matplotlib高级篇——坐标轴设置(坐标轴居中、坐标轴箭头、刻度设置、标识设置)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的骆驼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值