7-Pandas之索引调整方法
一、调整索引、修改列标签
1、调整索引的两种情况:
- 重新索引
- 设置新的索引
(1)重新索引
在Pandas对象中,其实索引也是一个对象,所以可对其进行修改。
例如:df.index=['a','b','c']
>>> df = {'one':pd.Series(np.random.randn(3)),'two':pd.Series(np.random.randn(3)),
'three':pd.Series(np.random.rand(3))}
>>> df = pd.DataFrame(df)
>>> df
one two three
0 -0.996986 0.190981 0.482912
1 -0.233812 -0.140953 0.052706
2 0.470900 0.590664 0.486823
#设置索引
>>> df.index=['a','b','c']
>>> df
one two three
a -0.996986 0.190981 0.482912
b -0.233812 -0.140953 0.052706
c 0.470900 0.590664 0.486823
(2)设置新的索引
reindex():重新索引并得到一个新的Pandas对象。
且reindex()方法不仅可以重新索引DataFrame,也可以同时实现过滤功能。
>>> new = df.reindex(['b','c','e'])
>>> new
one two three
b -0.233812 -0.140953 0.052706
c 0.470900 0.590664 0.486823
e NaN NaN NaN
reindex()也可以用来调整列的顺序,这时需要设定axis参数为'columns'或1;
>>> df.reindex(['three','two','one'],axis='columns')
three two one
a 0.766450 0.452801 1.286715
b 0.342262 1.523188 0.620788
c 0.867786 0.758714 -2.343242
(3)使用set_index()可以指定某一列为索引,这在对日期型数据或者是以名称进行区分的数据非常有用,后期会以实例描述的更为详细。
>>> df.set_index('one')
two three
one
-0.996986 0.190981 0.482912
-0.233812 -0.140953 0.052706
0.470900 0.590664 0.486823
上述的方法在将某一列设置为索引后,特征不会将该列进行保存,若需要将设置为索引的列保留在数据中,则需要将参数drop设置为False:
>>> df.set_index('one',drop=False)
one two three
one
1.286715 1.286715 0.452801 0.766450
0.620788 0.620788 1.523188 0.342262
-2.343242 -2.343242 0.758714 0.867786
若是希望在原来索引的基础之上添加新的变量构成层次化索引,则设置append参数为True;
>>>df.set_index('one',append=True)
>>> df
one two three
a 1.286715 0.452801 0.766450
b 0.620788 1.523188 0.342262
c -2.343242 0.758714 0.867786
>>> df.set_index('one',append=True)
two three
one
a 1.286715 0.452801 0.766450
b 0.620788 1.523188 0.342262
c -2.343242 0.758714 0.867786
>>>
2、修改标签
修改索引和列名的标签可以使用rename()方法结合字典、Series或者一个原函数将标签映射为一个新的标签。
(1)关于结合字典可以参照3-Pandas之Series和DataFrame区别的第六部分,
(2)使用函数映射的方式
例:将字符串的大写转换函数传入,对列标签进行修改
>>> df.rename(columns=str.upper)
ONE TWO THREE
a -0.996986 0.190981 0.482912
b -0.233812 -0.140953 0.052706
c 0.470900 0.590664 0.486823
例:结合lambda:将所有的列的前2个字符大写,其余小写
>>> df.rename(columns=lambda x:x[:2].upper()+x[2:].lower())
ONe TWo THree
a -0.996986 0.190981 0.482912
b -0.233812 -0.140953 0.052706
c 0.470900 0.590664 0.486823
二、创建层次化索引
层次化索引可以基于Series和DataFrame创建更加高维的数据。
也就是说,若有一个DataFrame是一个堆积式的(在一个轴上需要创建不止一个索引),那么此时就需要用到层次化索引,这和Panel有些类似。但是在实际中并不是很常用!
创建一个层次化索引:
>>> data=pd.Series(np.random.randn(5),index=[['a','a','b','b','b'],['a1','a2','b1','b2','b3']])
>>> data
a a1 0.792324
a2 -0.650764
b b1 -0.282874
b2 -1.402477
b3 -3.551578
dtype: float64 #查看索引
>>> data.index
MultiIndex(levels=[['a', 'b'], ['a1', 'a2', 'b1', 'b2', 'b3']],
codes=[[0, 0, 1, 1, 1], [0, 1, 2, 3, 4]])
#levels包含了每个级别索引的标签,labels是对每个数据在对应不同levels的位置进行了标记
每个index均有一个属性(名称names),可通过.index.names对索引列的列名进行创建于修改
>>> data.index.names=['first','second']
>>> data
first second
a a1 0.792324
a2 -0.650764
b b1 -0.282874
b2 -1.402477
b3 -3.551578
dtype: float64
三、重排级别顺序
重排级别顺序是基于有索引个数>=1的DataFrame。
(1)swaplevel():将columns轴上的索引级别进行互换。
>>>df.swaplevel(0,1,axis=1)
(2)reorder_levels():指定多个级别的顺序
(3)提取数据还是可以使用iloc()与loc()
(4)unstack():若index轴上有多个级别索引的DataFrame,使用该方法将指定级别(level参数)安排在columns上形成一个新的DataFrame
7-Pandas之索引调整方法的更多相关文章
- pandas重置索引的几种方法探究
pandas重置索引的几种方法探究 reset_index() reindex() set_index() 函数名字看起来非常有趣吧! 不仅如此. 需要探究. http://nbviewer.jupy ...
- Pandas 常见的基本方法
说明:文章所有内容均截选自实验楼教程[Pandas 使用教程],想要查看教程完整内容,点击教程即可~ 前言: Pandas 是非常著名的开源数据处理工具,我们可以通过它对数据集进行快速读取.转换.过滤 ...
- pandas DataFrame的修改方法
pandas DataFrame的增删查改总结系列文章: pandas DaFrame的创建方法 pandas DataFrame的查询方法 pandas DataFrame行或列的删除方法 pand ...
- pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
pandas DataFrame的增删查改总结系列文章: pandas DaFrame的创建方法 pandas DataFrame的查询方法 pandas DataFrame行或列的删除方法 pand ...
- pandas DataFrame的创建方法
pandas DataFrame的增删查改总结系列文章: pandas DaFrame的创建方法 pandas DataFrame的查询方法 pandas DataFrame行或列的删除方法 pand ...
- pandas.DataFrame的groupby()方法的基本使用
pandas.DataFrame的groupby()方法是一个特别常用和有用的方法.让我们快速掌握groupby()方法的基础使用,从此数据分析又多一法宝. 首先导入package: import p ...
- Pandas | 13 索引和选择数据
Pandas现在支持三种类型的多轴索引; 编号 索引 描述 1 .loc() 基于标签 2 .iloc() 基于整数 3 .ix() 基于标签和整数 .loc() Pandas提供了各种方法来完成基于 ...
- SQL索引优化方法
SQL索引优化方法 以下是代码片段: ROW_NUMBER() OVER(ORDER BY ResumeCreateTime DESC) as [RowID] ,[TopDegree] ,[Degre ...
- (三)pandas 层次化索引
pandas层次化索引 1. 创建多层行索引 1) 隐式构造 最常见的方法是给DataFrame构造函数的index参数传递两个或更多的数组 Series也可以创建多层索引 import numpy ...
随机推荐
- java架构-一些设计上的基本常识
最近给团队新人讲了一些设计上的常识,可能会对其它的新人也有些帮助, 把暂时想到的几条,先记在这里. 1.API与SPI分离 框架或组件通常有两类客户,一个是使用者,一个是扩展者. API(Applic ...
- 「MoreThanJava」Day2:变量、数据类型和运算符
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
- css样式冲突怎么解决?
一个网页有时会使用两种CSS,那发生css样式冲突要怎么解决?下面本篇文章就来给大家介绍一下发生css样式冲突的解决方法,希望对大家有所帮助. css冲突怎么解决? 解决方法有很多,如果可以对html ...
- 常用API - 时间日期类
Date类 概述 java.util.Date类 表示特定的瞬间,精确到毫秒. 继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期 ...
- 「疫期集训day8」 雪原
可恶的红军,他们嘴上说着以人民为中心,被地里烧杀强掠同族人----为我们祝福吧,伟大的母亲河,为了沙皇------窝瓦河(伏尔加河)中坚守的俄罗斯白军 又是考爆的一天,然俄前两题都该A的.T1签到题一 ...
- HDU 4352 XHXJ's LIS HDU(数位DP)
HDU 4352 XHXJ's LIS HDU 题目大意 给你L到R区间,和一个数字K,然后让你求L到R区间之内满足最长上升子序列长度为K的数字有多少个 solution 简洁明了的题意总是让人无从下 ...
- 深度学习论文翻译解析(九):Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
论文标题:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition 标题翻译:用于视觉识别的深度卷积神 ...
- scala 数据结构(十一):流 Stream、视图 View、线程安全的集合、并行集合
1 流 Stream stream是一个集合.这个集合,可以用于存放无穷多个元素,但是这无穷个元素并不会一次性生产出来,而是需要用到多大的区间,就会动态的生产,末尾元素遵循lazy规则(即:要使用结果 ...
- 数据库04 /多表查询、pymysql模块
数据库04 /多表查询.pymysql模块 目录 数据库04 /多表查询.pymysql模块 1. 笛卡尔积 2. 连表查询 2.1 inner join 内连接 2.2 left join 左连接 ...
- 机器学习实战基础(二十四):sklearn中的降维算法PCA和SVD(五) PCA与SVD 之 重要接口inverse_transform
重要接口inverse_transform 在上周的特征工程课中,我们学到了神奇的接口inverse_transform,可以将我们归一化,标准化,甚至做过哑变量的特征矩阵还原回原始数据中的特征矩阵 ...