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学习(创建多层索引、数据重塑与轴向旋转)相关推荐

  1. 数据分析之pandas学习笔记(六)(层次化索引、重塑、轴向旋转、行列变换、合并表数据)

    数据分析之Pandas学习笔记(六)(层次化索引.重塑.轴向旋转.行列变换.合并表数据) level层次化索引 unstack()与stack()进行重塑,即:行列索引变换 swaplevel()交换 ...

  2. 6种方式创建多层索引MultiIndex

    49_6种方式创建多层索引MultiIndex 公众号:尤而小屋 作者:Peter 编辑:Peter 大家好,我是Peter~ 在上一篇文章中介绍了如何创建Pandas中的单层索引,今天给大家带来的是 ...

  3. Python 数据分析三剑客之 Pandas(八):数据重塑、重复数据处理与数据替换

    CSDN 课程推荐:<迈向数据科学家:带你玩转Python数据分析>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python ...

  4. Pandas的MultiIndex多层索引使用

    目录 MultiIndex多层索引 1.创建方式 1.1.第一种:多维数组 1.2.第二种:MultiIndex 1.3.创建案例: 2.多层索引操作 2.1.Series多层索引

  5. Python数据分析 | (27) 重塑和轴向旋转

    有许多用于重新排列表格型数据的基础运算.这些函数也称作重塑(reshape)或轴向旋转(pivot)运算. 目录 1. 重塑层次化索引 2. 将"长格式"旋转为"宽格式& ...

  6. javascript学习-创建json对象数据,遍历

    之前我已经有讲过后台返回json数据到前台,并在前台遍历json数据. 这里讲下直接在JS里创建JSON数据,然后遍历使用~ 创建代码例如以下:(创建的是JSON对象) var YearSelect ...

  7. Pandas的学习(6.DataFrame和Series创建多层行索引以及多层列索引)

    1.创建多层行索引 (1) 隐式构造         最常见的方法是给DataFrame构造函数的index参数传递两个或更多的数组 -- Series也可以创建多层索引 import numpy a ...

  8. Pandas数据分析14——pandas数据框的多层索引

    参考书目:<深入浅出Pandas:利用Python进行数据处理与分析> pandas数据框针对高维数据,也有多层索引的办法去应对.多层数据一般长这个样子 可以看到AB两大列,下面又有xy两 ...

  9. pandas dataframe创建_Python数据分析基础之Pandas学习 (上)

    全文共 20592 字,63 幅图,预计阅读时间 52 分钟.[注:本帖小节 2.2 用万矿里的 WindPy 来下载金融数据]0引言 本文是 Python 系列的第六篇 Python 入门篇 (上) ...

最新文章

  1. windows不能查询组策略对象列表 解决方案
  2. 机器学习中如何处理缺失数据(NAN和Ifo)?
  3. 【转】1.SharePoint服务器端对象模型 之 对象模型概述(Part 1)
  4. 李宏毅机器学习(一)基本概念介绍
  5. Visual Assist X Options 注释设置-类
  6. java while循环_Java while循环
  7. UltraEdit v17.10.0,注册机,注册码
  8. 开启Github之旅
  9. java电子书大全 下载
  10. 跟我学制作javaEE网上书店销售管理系统(沙箱支付)springboot+vue
  11. 集美大学计算机课程考试系统,集美大学教务管理系统入口http://jwgl3.jmu.edu.cn
  12. 小甲鱼python教程视频怎么样-为什么我看完小甲鱼的python视频还是不会写呢?
  13. 磁盘如何除写保护(常规解决方案)
  14. 猫盘onespace x3p系统使用
  15. C++11 packaged_task
  16. Python将数字转换成大写字母
  17. 几种闪存技术:eMMC、UFS2.1、UFS3.0、SSD
  18. Wine的安装和配置(实现中文输入法和中文的复制粘贴)(转)
  19. axure下移固定地方_axure固定元件位置 教程:使用axure动态面板制作一个返回顶部的按钮...
  20. 大话设计模式 第二章 策略模式购物车价格查询

热门文章

  1. 【Matlab】如何使用Simulink进行电池建模和SOC预估
  2. 国内首场新GRE考试常见问题解答及首考回忆
  3. linux和数据库day01随堂笔记
  4. ASP.NET控件集合
  5. 小红书如何引流兼职粉?快点击打开看看吧
  6. Webservice的测试环境 网上现有的几个webservice
  7. 《天穗之咲稻姬》游玩感想
  8. GitHub的高级搜索方式--找到最想要的源码
  9. 框图c语言程序,C语言程序设计框图
  10. 使用TP5开发微信服务商支付