博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pandas学习(创建多层索引、数据重塑与轴向旋转)
阅读量:7223 次
发布时间:2019-06-29

本文共 9425 字,大约阅读时间需要 31 分钟。

pandas学习(创建多层索引、数据重塑与轴向旋转)

 

目录

创建多层索引 数据重塑与轴向旋转

 

 

 

 

创建多层索引

 

隐式构造

 

Series

最常见的方法是给DataFrame构造函数的index参数传递两个或更多的数组,Series也可以创建多层索引。

s = Series(np.random.randint(0,150,size=6),index=[['a','a','b','b','c','c'],['期中','期末','期中','期末','期中','期末']])

 

# 输出a  期中    59   期末    43b  期中    28   期末    99c  期中    92   期末    58dtype: 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 np import 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变成一个DataFrames=s.unstack()print(s)#通过 stack方法可以将stack方法将DataFrame变成Seriess=s.stack()print(s)

  

#原始数据 a  1    1   2    2   3    3b  1    4   2    5   3    6c  1    7   2    8   3    9dtype: 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    12    23    3dtype: int32 #s['a':'c'],切片a  1    1   2    2   3    3b  1    4   2    5   3    6c  1    7   2    8   3    9dtype: int32 #s[:,'1'],内层索引取值a    1b    4c    7dtype: int32 #s['a','1'],取具体值1 #通过unstack方法将Series转为DataFrame   1  2  3a  1  2  3b  4  5  6c  7  8  9 #通过stack方法将DataFrame转为Seriesa  1    1   2    2   3    3b  1    4   2    5   3    6c  1    7   2    8   3    9dtype: int32

 

 

 

DataFrame的层次化索引

#对于 DataFrame来说,行和列都能进行层次化索引,这就是说,可以有四个索引#set_index可以把列变成索引#reset_index是把索引变成列#每一个索引都是一个元组

  

import numpy as np import pandas as pd data=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       B     Z   X   Ca 1  0   1   2  2  3   4   5b 1  6   7   8  2  9  10  11取列a  1    0   2    3b  1    6   2    9Name: (A, Z), dtype: int32取行A  Z    0   X    1B  C    2Name: (a, 1), dtype: int32取值0

 

 

# set_index是把列变成索引 # reset_index是把索引变成列 # 这样做会大大简化我们的筛选环节 import numpy as np import 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.51    阿甘正传  580897     剧情/爱情    美国  1994-06-23  142  1994  9.42  肖申克的救赎  692795     剧情/犯罪    美国  1994-09-10  142  1994  9.63    控方证人   42995  剧情/悬疑/犯罪    美国  1957-12-17  116  1957  9.54    霸王别姬  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.51    阿甘正传    美国  580897     剧情/爱情  1994-06-23  142  1994  9.42  肖申克的救赎    美国  692795     剧情/犯罪  1994-09-10  142  1994  9.63    控方证人    美国   42995  剧情/悬疑/犯罪  1957-12-17  116  1957  9.54    霸王别姬  中国大陆  478523  剧情/爱情/同性  1993-01-01  171  1993  9.4

  

 

 

轴向旋转

import numpy as np import pandas as pd #  读入数据 df=pd.read_csv('data1.txt') print('原始数据') print(df)
#数据旋转# # 行和列转化# .T可以直接让数据的行和列进行交换
print('进行行和列的转换') print(df.T) #DataFrame也可以使用stack和unstack,转化为层次化索引的Series print('DataFrame---->Series') df=df.stack() print(df) print('Series--->DataDrame') df=df.unstack() print(df)

  

原始数据       名字    投票人数        类型    产地        上映时间   时长    年代   评分0    美丽人生   42995  剧情/喜剧/爱情   意大利  1997-12-20  116  1997  9.51    阿甘正传  580897     剧情/爱情    美国  1994-06-23  142  1994  9.42  肖申克的救赎  692795     剧情/犯罪    美国  1994-09-10  142  1994  9.63    控方证人   42995  剧情/悬疑/犯罪    美国  1957-12-17  116  1957  9.54    霸王别姬  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---->Series0  名字            美丽人生   投票人数         42995   类型        剧情/喜剧/爱情   产地             意大利   上映时间    1997-12-20   时长             116   年代            1997   评分             9.51  名字            阿甘正传   投票人数        580897   类型           剧情/爱情   产地              美国   上映时间    1994-06-23   时长             142   年代            1994   评分             9.42  名字          肖申克的救赎   投票人数        692795   类型           剧情/犯罪   产地              美国   上映时间    1994-09-10   时长             142   年代            1994   评分             9.63  名字            控方证人   投票人数         42995   类型        剧情/悬疑/犯罪   产地              美国   上映时间    1957-12-17   时长             116   年代            1957   评分             9.54  名字            霸王别姬   投票人数        478523   类型        剧情/爱情/同性   产地            中国大陆   上映时间    1993-01-01   时长             171   年代            1993   评分             9.4dtype: object Series--->DataDrame       名字    投票人数        类型    产地        上映时间   时长    年代   评分0    美丽人生   42995  剧情/喜剧/爱情   意大利  1997-12-20  116  1997  9.51    阿甘正传  580897     剧情/爱情    美国  1994-06-23  142  1994  9.42  肖申克的救赎  692795     剧情/犯罪    美国  1994-09-10  142  1994  9.63    控方证人   42995  剧情/悬疑/犯罪    美国  1957-12-17  116  1957  9.54    霸王别姬  478523  剧情/爱情/同性  中国大陆  1993-01-01  171  1993  9.4

  

 

转载于:https://www.cnblogs.com/-wenli/p/10287202.html

你可能感兴趣的文章
Latest crack software ftp download
查看>>
OpenStack 的防火墙规则流程
查看>>
Overloading Django Form Fields
查看>>
03.MyBatis的核心配置文件SqlMapConfig.xml
查看>>
python学习笔记(9)-python编程风格
查看>>
Apache HTTP Server搭建虚拟主机
查看>>
(译).NET4.X 并行任务中Task.Start()的FAQ
查看>>
git log显示
查看>>
java中相同名字不同返回类型的方法
查看>>
Rails NameError uninitialized constant class solution
查看>>
Android 获取SDCard中某个目录下图片
查看>>
设置cookies第二天0点过期
查看>>
【转载】NIO客户端序列图
查看>>
poj_2709 贪心算法
查看>>
【程序员眼中的统计学(11)】卡方分布的应用
查看>>
文件夹工具类 - FolderUtils
查看>>
http://blog.csdn.net/huang_xw/article/details/7090173
查看>>
lua学习例子
查看>>
研究:印度气候变暖速度加剧 2040年或面临重灾
查看>>
python爬虫——爬取豆瓣TOP250电影
查看>>