pandas学习(创建多层索引、数据重塑与轴向旋转)
pandas学习(创建多层索引、数据重塑与轴向旋转)
目录
创建多层索引
数据重塑与轴向旋转
创建多层索引
隐式构造
Series
最常见的方法是给DataFrame构造函数的index参数传递两个或更多的数组,Series也可以创建多层索引。
s = Series(np.random.randint(0,150,size=6),index=[['a','a','b','b','c','c'],['期中','期末','期中','期末','期中','期末']])
# 输出
a 期中 59期末 43
b 期中 28期末 99
c 期中 92期末 58
dtype: int32
DataFrame
df1 = DataFrame(np.random.randint(0,150,size=(4,6)),index = list('东南西北'),columns=[['python','python','math','math','En','En'],['期中','期末','期中','期末','期中','期末']])
python math En 期中 期末 期中 期末 期中 期末
东 137 119 22 3 130 79
南 90 146 60 80 143 23
西 105 31 125 87 7 66
北 131 62 13 67 81 3
显示构造pd.MultiIndex
使用数组构造
df2 = DataFrame(np.random.randint(0,150,size=(4,6)),
index = list('东南西北'),
columns=[['python','python','math','math','En','En'],['期中','期末','期中','期末','期中','期末']])
python math En 期中 期末 期中 期末 期中 期末
东 99 10 148 9 146 104
南 65 75 7 1 74 107
西 136 45 83 121 61 12
北 143 131 85 27 55 47
使用tuple构造
df3 = DataFrame(np.random.randint(0,150,size=(4,6)),index = list('东南西北'),columns =pd.MultiIndex.from_tuples([('python','期中'),('python','期末'),('math','期中'),('math','期末'),('En','期中'),('En','期末')]))
python math En 期中 期末 期中 期末 期中 期末
东 4 76 53 117 62 29
南 124 28 61 13 62 117
西 87 137 64 125 44 76
北 82 120 75 126 78 101
使用product构造(推荐)
df4 = DataFrame(np.random.randint(0,150,size=(8,12)),columns = pd.MultiIndex.from_product([['模拟考','正式考'],['数学','语文','英语','物理','化学','生物']]),index = pd.MultiIndex.from_product([['期中','期末'],['雷军','李斌'],['测试一','测试二']]))
模拟考 正式考 数学 语文 英语 物理 化学 生物 数学 语文 英语 物理 化学 生物
期中 雷军 测试一 18 74 113 13 15 73 80 122 80 45 38 103测试二 107 21 7 110 50 32 94 61 78 107 29 17李斌 测试一 62 73 41 8 111 89 100 27 70 58 78 9测试二 142 57 22 103 121 117 134 76 122 112 147 129
期末 雷军 测试一 129 26 144 106 63 130 23 68 64 92 126 86测试二 135 84 137 44 121 64 133 56 70 116 147 96李斌 测试一 56 141 40 20 83 84 133 144 105 100 129 52测试二 73 3 114 103 105 41 85 39 30 112 94 64
数据重塑与轴向旋转
数据重塑
层次化索引:层次化索引pandas的一项重要功能,它能使我们在一个轴上拥有多个索引
Series的层次化索引
import numpy as npimport pandas as pd
s=pd.Series(np.arange(1,10),index=[['a','a','a','b','b','b','c','c','c'],['1','2','3','1','2','3','1','2','3']])
print(s)
print(s.index)#取值(外层索引)
print(s['a'])
print(s['a':'c'])#取值(内层索引 )
print(s[:,'1'])#取值(具体值)
print(s['a','1'])#通过unstack方法可以将Series变成一个DataFrame
s=s.unstack()
print(s)
#通过 stack方法可以将stack方法将DataFrame变成Series
s=s.stack()
print(s)
#原始数据a 1 12 23 3
b 1 42 53 6
c 1 72 83 9
dtype: int32
#索引
MultiIndex(levels=[['a', 'b', 'c'], ['1', '2', '3']],labels=[[0, 0, 0, 1, 1, 1, 2, 2, 2], [0, 1, 2, 0, 1, 2, 0, 1, 2]])
#s['a'],通过外层索引取值
1 1
2 2
3 3
dtype: int32
#s['a':'c'],切片
a 1 12 23 3
b 1 42 53 6
c 1 72 83 9
dtype: int32
#s[:,'1'],内层索引取值
a 1
b 4
c 7
dtype: int32
#s['a','1'],取具体值
1
#通过unstack方法将Series转为DataFrame1 2 3
a 1 2 3
b 4 5 6
c 7 8 9
#通过stack方法将DataFrame转为Series
a 1 12 23 3
b 1 42 53 6
c 1 72 83 9
dtype: int32
DataFrame的层次化索引
#对于 DataFrame来说,行和列都能进行层次化索引,这就是说,可以有四个索引
#set_index可以把列变成索引
#reset_index是把索引变成列
#每一个索引都是一个元组
import numpy as npimport pandas as pddata=pd.DataFrame(np.arange(12).reshape(4,3),index=[['a','a','b','b'],[1,2,1,2]],columns=[['A','A','B'],['Z','X','C']])print('原始数据:')print(data) #取值# (1) 可以直接使用列名称来进行列索引# (2) 使用行索引需要用ix(),loc()等函数# 推荐使用loc()函数#确定一个值需要四个索引 #取列print('取列')print(data['A','Z']) #取行print('取行')print(data.loc['a',1]) #取某个值print('取值')print(data.loc['a',1]['A','Z'])
原始数据:A BZ X C
a 1 0 1 22 3 4 5
b 1 6 7 82 9 10 11
取列
a 1 02 3
b 1 62 9
Name: (A, Z), dtype: int32
取行
A Z 0X 1
B C 2
Name: (a, 1), dtype: int32
取值
0
# set_index是把列变成索引# reset_index是把索引变成列# 这样做会大大简化我们的筛选环节 import numpy as npimport pandas as pd# 读入数据df=pd.read_csv('data1.txt')print('原始数据')print(df) print('设置列为索引')df=df.set_index(['产地','名字'])print(df) #每一个索引都是一个元组print('返回索引的格式')print(df.index[0]) #获得某一行数据,数据以内层索引为序列print('获得某一行数据')print(df.loc['美国']) #对调内外层索引print('对调内外层索引')df=df.swaplevel('产地','名字')print(df) #取消层次化索引print('取消层次化索引')df=df.reset_index()print(df)
原始数据名字 投票人数 类型 产地 上映时间 时长 年代 评分
0 美丽人生 42995 剧情/喜剧/爱情 意大利 1997-12-20 116 1997 9.5
1 阿甘正传 580897 剧情/爱情 美国 1994-06-23 142 1994 9.4
2 肖申克的救赎 692795 剧情/犯罪 美国 1994-09-10 142 1994 9.6
3 控方证人 42995 剧情/悬疑/犯罪 美国 1957-12-17 116 1957 9.5
4 霸王别姬 478523 剧情/爱情/同性 中国大陆 1993-01-01 171 1993 9.4
设置列为索引投票人数 类型 上映时间 时长 年代 评分
产地 名字
意大利 美丽人生 42995 剧情/喜剧/爱情 1997-12-20 116 1997 9.5
美国 阿甘正传 580897 剧情/爱情 1994-06-23 142 1994 9.4肖申克的救赎 692795 剧情/犯罪 1994-09-10 142 1994 9.6控方证人 42995 剧情/悬疑/犯罪 1957-12-17 116 1957 9.5
中国大陆 霸王别姬 478523 剧情/爱情/同性 1993-01-01 171 1993 9.4
返回索引的格式
('意大利', '美丽人生')
获得某一行数据投票人数 类型 上映时间 时长 年代 评分
名字
阿甘正传 580897 剧情/爱情 1994-06-23 142 1994 9.4
肖申克的救赎 692795 剧情/犯罪 1994-09-10 142 1994 9.6
控方证人 42995 剧情/悬疑/犯罪 1957-12-17 116 1957 9.5
对调内外层索引投票人数 类型 上映时间 时长 年代 评分
名字 产地
美丽人生 意大利 42995 剧情/喜剧/爱情 1997-12-20 116 1997 9.5
阿甘正传 美国 580897 剧情/爱情 1994-06-23 142 1994 9.4
肖申克的救赎 美国 692795 剧情/犯罪 1994-09-10 142 1994 9.6
控方证人 美国 42995 剧情/悬疑/犯罪 1957-12-17 116 1957 9.5
霸王别姬 中国大陆 478523 剧情/爱情/同性 1993-01-01 171 1993 9.4
取消层次化索引名字 产地 投票人数 类型 上映时间 时长 年代 评分
0 美丽人生 意大利 42995 剧情/喜剧/爱情 1997-12-20 116 1997 9.5
1 阿甘正传 美国 580897 剧情/爱情 1994-06-23 142 1994 9.4
2 肖申克的救赎 美国 692795 剧情/犯罪 1994-09-10 142 1994 9.6
3 控方证人 美国 42995 剧情/悬疑/犯罪 1957-12-17 116 1957 9.5
4 霸王别姬 中国大陆 478523 剧情/爱情/同性 1993-01-01 171 1993 9.4
轴向旋转
import numpy as npimport pandas as pd# 读入数据df=pd.read_csv('data1.txt')print('原始数据')print(df)
#数据旋转
#
# 行和列转化
# .T可以直接让数据的行和列进行交换
print('进行行和列的转换')print(df.T) #DataFrame也可以使用stack和unstack,转化为层次化索引的Seriesprint('DataFrame---->Series')df=df.stack()print(df) print('Series--->DataDrame')df=df.unstack()print(df)
原始数据名字 投票人数 类型 产地 上映时间 时长 年代 评分
0 美丽人生 42995 剧情/喜剧/爱情 意大利 1997-12-20 116 1997 9.5
1 阿甘正传 580897 剧情/爱情 美国 1994-06-23 142 1994 9.4
2 肖申克的救赎 692795 剧情/犯罪 美国 1994-09-10 142 1994 9.6
3 控方证人 42995 剧情/悬疑/犯罪 美国 1957-12-17 116 1957 9.5
4 霸王别姬 478523 剧情/爱情/同性 中国大陆 1993-01-01 171 1993 9.4
进行行和列的转换0 1 2 3 4
名字 美丽人生 阿甘正传 肖申克的救赎 控方证人 霸王别姬
投票人数 42995 580897 692795 42995 478523
类型 剧情/喜剧/爱情 剧情/爱情 剧情/犯罪 剧情/悬疑/犯罪 剧情/爱情/同性
产地 意大利 美国 美国 美国 中国大陆
上映时间 1997-12-20 1994-06-23 1994-09-10 1957-12-17 1993-01-01
时长 116 142 142 116 171
年代 1997 1994 1994 1957 1993
评分 9.5 9.4 9.6 9.5 9.4
DataFrame---->Series
0 名字 美丽人生投票人数 42995类型 剧情/喜剧/爱情产地 意大利上映时间 1997-12-20时长 116年代 1997评分 9.5
1 名字 阿甘正传投票人数 580897类型 剧情/爱情产地 美国上映时间 1994-06-23时长 142年代 1994评分 9.4
2 名字 肖申克的救赎投票人数 692795类型 剧情/犯罪产地 美国上映时间 1994-09-10时长 142年代 1994评分 9.6
3 名字 控方证人投票人数 42995类型 剧情/悬疑/犯罪产地 美国上映时间 1957-12-17时长 116年代 1957评分 9.5
4 名字 霸王别姬投票人数 478523类型 剧情/爱情/同性产地 中国大陆上映时间 1993-01-01时长 171年代 1993评分 9.4
dtype: object
Series--->DataDrame名字 投票人数 类型 产地 上映时间 时长 年代 评分
0 美丽人生 42995 剧情/喜剧/爱情 意大利 1997-12-20 116 1997 9.5
1 阿甘正传 580897 剧情/爱情 美国 1994-06-23 142 1994 9.4
2 肖申克的救赎 692795 剧情/犯罪 美国 1994-09-10 142 1994 9.6
3 控方证人 42995 剧情/悬疑/犯罪 美国 1957-12-17 116 1957 9.5
4 霸王别姬 478523 剧情/爱情/同性 中国大陆 1993-01-01 171 1993 9.4
转载于:https://www.cnblogs.com/-wenli/p/10287202.html
pandas学习(创建多层索引、数据重塑与轴向旋转)相关推荐
- 数据分析之pandas学习笔记(六)(层次化索引、重塑、轴向旋转、行列变换、合并表数据)
数据分析之Pandas学习笔记(六)(层次化索引.重塑.轴向旋转.行列变换.合并表数据) level层次化索引 unstack()与stack()进行重塑,即:行列索引变换 swaplevel()交换 ...
- 6种方式创建多层索引MultiIndex
49_6种方式创建多层索引MultiIndex 公众号:尤而小屋 作者:Peter 编辑:Peter 大家好,我是Peter~ 在上一篇文章中介绍了如何创建Pandas中的单层索引,今天给大家带来的是 ...
- Python 数据分析三剑客之 Pandas(八):数据重塑、重复数据处理与数据替换
CSDN 课程推荐:<迈向数据科学家:带你玩转Python数据分析>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python ...
- Pandas的MultiIndex多层索引使用
目录 MultiIndex多层索引 1.创建方式 1.1.第一种:多维数组 1.2.第二种:MultiIndex 1.3.创建案例: 2.多层索引操作 2.1.Series多层索引
- Python数据分析 | (27) 重塑和轴向旋转
有许多用于重新排列表格型数据的基础运算.这些函数也称作重塑(reshape)或轴向旋转(pivot)运算. 目录 1. 重塑层次化索引 2. 将"长格式"旋转为"宽格式& ...
- javascript学习-创建json对象数据,遍历
之前我已经有讲过后台返回json数据到前台,并在前台遍历json数据. 这里讲下直接在JS里创建JSON数据,然后遍历使用~ 创建代码例如以下:(创建的是JSON对象) var YearSelect ...
- Pandas的学习(6.DataFrame和Series创建多层行索引以及多层列索引)
1.创建多层行索引 (1) 隐式构造 最常见的方法是给DataFrame构造函数的index参数传递两个或更多的数组 -- Series也可以创建多层索引 import numpy a ...
- Pandas数据分析14——pandas数据框的多层索引
参考书目:<深入浅出Pandas:利用Python进行数据处理与分析> pandas数据框针对高维数据,也有多层索引的办法去应对.多层数据一般长这个样子 可以看到AB两大列,下面又有xy两 ...
- pandas dataframe创建_Python数据分析基础之Pandas学习 (上)
全文共 20592 字,63 幅图,预计阅读时间 52 分钟.[注:本帖小节 2.2 用万矿里的 WindPy 来下载金融数据]0引言 本文是 Python 系列的第六篇 Python 入门篇 (上) ...
最新文章
- windows不能查询组策略对象列表 解决方案
- 机器学习中如何处理缺失数据(NAN和Ifo)?
- 【转】1.SharePoint服务器端对象模型 之 对象模型概述(Part 1)
- 李宏毅机器学习(一)基本概念介绍
- Visual Assist X Options 注释设置-类
- java while循环_Java while循环
- UltraEdit v17.10.0,注册机,注册码
- 开启Github之旅
- java电子书大全 下载
- 跟我学制作javaEE网上书店销售管理系统(沙箱支付)springboot+vue
- 集美大学计算机课程考试系统,集美大学教务管理系统入口http://jwgl3.jmu.edu.cn
- 小甲鱼python教程视频怎么样-为什么我看完小甲鱼的python视频还是不会写呢?
- 磁盘如何除写保护(常规解决方案)
- 猫盘onespace x3p系统使用
- C++11 packaged_task
- Python将数字转换成大写字母
- 几种闪存技术:eMMC、UFS2.1、UFS3.0、SSD
- Wine的安装和配置(实现中文输入法和中文的复制粘贴)(转)
- axure下移固定地方_axure固定元件位置 教程:使用axure动态面板制作一个返回顶部的按钮...
- 大话设计模式 第二章 策略模式购物车价格查询