一、调整索引、修改列标签

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之索引调整方法的更多相关文章

  1. pandas重置索引的几种方法探究

    pandas重置索引的几种方法探究 reset_index() reindex() set_index() 函数名字看起来非常有趣吧! 不仅如此. 需要探究. http://nbviewer.jupy ...

  2. Pandas 常见的基本方法

    说明:文章所有内容均截选自实验楼教程[Pandas 使用教程],想要查看教程完整内容,点击教程即可~ 前言: Pandas 是非常著名的开源数据处理工具,我们可以通过它对数据集进行快速读取.转换.过滤 ...

  3. pandas DataFrame的修改方法

    pandas DataFrame的增删查改总结系列文章: pandas DaFrame的创建方法 pandas DataFrame的查询方法 pandas DataFrame行或列的删除方法 pand ...

  4. pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)

    pandas DataFrame的增删查改总结系列文章: pandas DaFrame的创建方法 pandas DataFrame的查询方法 pandas DataFrame行或列的删除方法 pand ...

  5. pandas DataFrame的创建方法

    pandas DataFrame的增删查改总结系列文章: pandas DaFrame的创建方法 pandas DataFrame的查询方法 pandas DataFrame行或列的删除方法 pand ...

  6. pandas.DataFrame的groupby()方法的基本使用

    pandas.DataFrame的groupby()方法是一个特别常用和有用的方法.让我们快速掌握groupby()方法的基础使用,从此数据分析又多一法宝. 首先导入package: import p ...

  7. Pandas | 13 索引和选择数据

    Pandas现在支持三种类型的多轴索引; 编号 索引 描述 1 .loc() 基于标签 2 .iloc() 基于整数 3 .ix() 基于标签和整数 .loc() Pandas提供了各种方法来完成基于 ...

  8. SQL索引优化方法

    SQL索引优化方法 以下是代码片段: ROW_NUMBER() OVER(ORDER BY ResumeCreateTime DESC) as [RowID] ,[TopDegree] ,[Degre ...

  9. (三)pandas 层次化索引

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

随机推荐

  1. python之shutil模块的使用

    shutil模块 shutil模块是一种高级的文件操作工具,其对文件的复制与删除操作非常强大,shutil 名字来源于 shell utilities,该模块拥有许多文件(夹)操作的功能,包括复制.移 ...

  2. Wooden Stricks——两个递增条件的线性DP

    题目 一堆n根木棍.每个棒的长度和重量是预先已知的.这些木棒将由木工机械一一加工.机器需要准备一些时间(称为准备时间)来准备处理木棍.设置时间与清洁操作以及更换机器中的工具和形状有关.木工机械的准备时 ...

  3. web网页动态分享facebook和twitter

    介绍 facebook分享 http://www.facebook.com/sharer.php?t=${text}u=encodeURIComponent('静态html') twitter分享 h ...

  4. 解决Linux搜狗输入法工具栏无法移动

    问题的出现 前两天一位朋友(@午后下午茶)发现一个有趣的情况: 为了复现bug,我把自己的输入法工具栏也挪到了顶栏,果然也无法挪动了 解决方法 原理不明,但解决方法很简单. 如图所示,随便找个输入框打 ...

  5. java 基本语法(十) 数组(三) 二维数组

    1.如何理解二维数组? 数组属于引用数据类型数组的元素也可以是引用数据类型一个一维数组A的元素如果还是一个一维数组类型的,则,此数组A称为二维数组. 2.二维数组的声明与初始化 正确的方式: int[ ...

  6. Django框架11 /form组件、modelForm组件

    Django框架11 /form组件.modelForm组件 目录 Django框架11 /form组件.modelForm组件 1. form组件介绍 2. form常用字段与插件 3. form所 ...

  7. 移除hmtl5 input type=“number”的step验证

    设置 step="any"例如:<input type="number" step="any" value=""& ...

  8. socket采用epoll编程demo

    epoll工作流程 首先,需要调用epoll_create创建epoll: 此后我们就可以进行socket/bind/listen: 然后调用epoll_ctl进行注册: 接下来,就可以通过一个whi ...

  9. oracle创建Javasource实现数据库备份

    因客户需求,需要在业务系统中,菜单中的网页中的按钮中加入一个按钮,用于点击备份数据库 (环境:只配置了数据源连接oralce ,应用服务器和数据服务器不在一台机器,且数据库机器oracle操作系统账号 ...

  10. P1776 宝物筛选

    题目: 正文: 啊,多重背包真恶心... 一开始我是把多重背包改成了01背包,然鹅我当时是直接1个1个的往后摞的... 参见以下代码: for(int i=1;i<=n;++i){//平平无奇的 ...