pandas入门学习--------------------------(二)

索引对象

pandas的索引对象负责管理轴标签和其他元数据(比如轴名称等)。构建series或DataFrame时,所用到的任何数组或其他序列的标签都会转换成一个index:

In [1]: import pandas as pd

In [2]: import numpy as np

In [3]: from pandas import Series

In [4]: obj=Series(range(3),index=[‘a‘,‘b‘,‘c‘])

In [5]: index=obj.index

In [6]: index
Out[6]: Index([‘a‘, ‘b‘, ‘c‘], dtype=‘object‘)

In [7]: index[1:]
Out[7]: Index([‘b‘, ‘c‘], dtype=‘object‘)

index对象是不可修改的(immutable),因此用户不能对其进行修改

In [8]: index[1]=‘d‘
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-8-8be6e68dba2d> in <module>()
----> 1 index[1]=‘d‘

d:\python\python36\lib\site-packages\pandas\core\indexes\base.py in __setitem__(self, key, value)
   2048
   2049     def __setitem__(self, key, value):
-> 2050         raise TypeError("Index does not support mutable operations")
   2051
   2052     def __getitem__(self, key):

TypeError: Index does not support mutable operations

不可修改性非常重要,因为这样才能使Index对象在多个数据结构之间安全共享:

In [9]: index=pd.Index(np.arange(3))

In [10]: obj2=Series([1.5,-2.5,0],index=index)

In [11]: obj2.index is index
Out[11]: True

In [12]: obj2.index
Out[12]: Int64Index([0, 1, 2], dtype=‘int64‘)

Index类为pandas库中内置的类。

pandas中主要的index对象:

1.index  最泛化的Index对象,将轴标签表示为一个由python对象组成的Numpy数组

2.Int64Index  针对整数的特殊Index

3.MultilIndex  “层次化”索引对象,表示单个轴上的多层索引。可以看做由元组组成的数组。

4.DatatimeIndex  存储纳秒级时间戳(用Numpy的datatime64类型表示)

5.PeriodIndex  针对Period数据(时间间隔)的特殊Index

Index的方法和属性

append   连接另一个Index对象,产生一个新的Index

diff       计算差集,并得到一个Index

intersection   计算交集

union  计算并集

isin     计算一个指示各值是否都包含在参数集合那种的布尔型数组

delete  删除索引i处的元素,并得到一个新的Index

drop  删除传入的值,并得到新的Index

insert 将元素插入到索引i处,并得到一个新的Index

is_monotonic 当各元素均大于等于前一个元素时,返回True

is_unique  当Index没有重复值时,返回True

unique  计算Index中唯一值的数组

重新索引

pandas对象的一个重要方法是reindex,其作用是创建一个适应新索引的新对象。

In [16]: obj=Series([4.5,7.3,-5.3,3.6],index=[‘d‘,‘b‘,‘a‘,‘c‘])

In [17]: obj
Out[17]:
d    4.5
b    7.3
a   -5.3
c    3.6
dtype: float64

调用该Series的reindex将会根据新索引进行重排。如果当某个索引值当前不存在,就引入缺失值:

In [18]: obj2=obj.reindex([‘a‘,‘b‘,‘c‘,‘d‘,‘e‘])

In [19]: obj2
Out[19]:
a   -5.3
b    7.3
c    3.6
d    4.5
e    NaN
dtype: float64
In [22]: obj.reindex([‘a‘,‘b‘,‘c‘,‘d‘,‘e‘],fill_value=0)
Out[22]:
a   -5.3
b    7.3
c    3.6
d    4.5
e    0.0
dtype: float64

对于时间序列这样的有序数据,重新索引可能需要做一些插值处理。method选项可以达到这个目的。

使用ffill可以实现前向值填充:

In [23]: obj3=Series([‘blue‘,‘purple‘,‘yellow‘],index=[0,2,4])

In [24]: obj3.reindex(range(6),method=‘ffill‘)
Out[24]:
0      blue
1      blue
2    purple
3    purple
4    yellow
5    yellow
dtype: object

reindex的(插值)method选项:

ffill 或pad    前向填充(或搬运)值

bfill 或backfill  后向填充(或搬运)值

对于DataFrame,reindex可以修改(行)索引 丶列,或2个都修改。如果仅传入一个序列,则会重新索引行:

In [26]: from pandas import DataFrame

In [27]: frame = DataFrame(np.arange(9).reshape((3,3)),index=[‘a‘,‘c‘,‘d‘],columns=[‘Ohio‘,‘Texas‘,‘California‘])

In [28]: frame
Out[28]:
   Ohio  Texas  California
a     0      1           2
c     3      4           5
d     6      7           8

In [29]: frame2=frame.reindex([‘a‘,‘b‘,‘c‘,‘d‘])

In [30]: frame2
Out[30]:
   Ohio  Texas  California
a   0.0    1.0         2.0
b   NaN    NaN         NaN
c   3.0    4.0         5.0
d   6.0    7.0         8.0

使用columns关键字可以重新索引列:

In [31]: states=[‘Texas‘,‘Utah‘,‘California‘]

In [32]: frame.reindex(columns=states)
Out[32]:
   Texas  Utah  California
a      1   NaN           2
c      4   NaN           5
d      7   NaN           8

也可以同时对行和列进行重新索引,而插值则只能按行应用:

In [44]: frame.reindex(index=[‘a‘,‘b‘,‘c‘,‘d‘],method=‘ffill‘)
Out[44]:
   Ohio  Texas  California
a     0      1           2
b     0      1           2
c     3      4           5
d     6      7           8
In [46]: frame.reindex(index=[‘a‘,‘b‘,‘c‘,‘d‘],method=‘ffill‘).reindex(columns=states)
Out[46]:
   Texas  Utah  California
a      1   NaN           2
b      1   NaN           2
c      4   NaN           5
d      7   NaN           8

利用ix的标签索引功能,重新索引任务可以变得更简洁:

In [54]: frame.ix[[‘a‘,‘b‘,‘c‘,‘d‘],states]
Out[54]:
   Texas  Utah  California
a    1.0   NaN         2.0
b    NaN   NaN         NaN
c    4.0   NaN         5.0
d    7.0   NaN         8.0

原文地址:https://www.cnblogs.com/catxjd/p/9201595.html

时间: 2024-08-29 07:21:06

pandas入门学习--------------------------(二)的相关文章

Objective C 快速入门学习二

Objective-C 类.对象.方法 1.编写一个复数类: #import <Foundation/Foundation.h>@interface Complex: NSObject //类声明,Complex继承NSObject { int iReal;//成员变量声明,在括号内 int iImag; } //成员函数声明,在括号外 -(void) print; -(void) setReal : (int) n; -(void)setImag : (int) d; @end //@int

MongoDB入门学习(二):MongoDB的基本概念和数据类型

上一篇讲了MongoDB的安装和管理,其中涉及到了一些概念,数据结构还有一些API的调用,不知道的没关系,其实很简单,这篇会简单介绍一下. 1.文档 文档是MongoDB的核心概念,多个键值对有序的放在一起就是一个文档,文档是MongoDB存储数据最基本的数据结构.对MongoDB都是以文档的形式来操作的,使用了一种类似JSON的二进制BSON数据格式,对API的调用都是传的文档参数.每种编程语言都有标示文档的数据结构,比如java的map,lua的table,python的dict等等,但是都

SpringMVC入门学习(二)

SpringMVC入门学习(二) ssm框架 springMVC 在上一篇博客中,我简单介绍了一下SpringMVC的环境配置,和简单的使用,今天我们将进一步的学习下Springmvc的操作. model.addAttribute()的使用 model接口的源代码: 由图可知,在addAttribute()中有两种入参方式,一种是指明名字var1,一种是不指明名字var1.在不指明名字中,会通过相近的去寻找. 在addAttribute()中,我们可以放任何对象: 首先先导入jsp标签maven

git入门学习(二):新建分支/上传代码/删除分支

一.git新建分支,上传代码到新的不同分支 我要实现的效果,即是多个内容的平行分支:这样做的主要目的是方便统一管理属于同一个内容的不同的项目,互不干扰.如图所示: 前提是我的github上已经有webpack_test项目了,我是在这个项目的基础上新建其他的分支并开展工作的.如图: 如果你对如何新建webpack_test项目不清楚,请参考我的前一篇文章:git入门学习(一):github for windows上传本地项目到github,操作步骤如下: 1.1.保留webpack_test项目

activiti入门学习二

一.上一篇入门学习的地址 https://www.cnblogs.com/yangk1996/p/10878449.html 二.单机演示Demo 12.使用UEL表达式动态增加流程处理人 从新创建一个流程,使其Assignee变成表达式的.然后从新创建流程. * @Description: 启动流程实例,动态设置assignee * @date: 2019/6/23 20:28 */ public class AssigneeUel { public static void main(Stri

node入门学习(二)

一.模块系统 1.创建模块和引用模块 //如何创建一个模块 exports.hello = function(){ console.log('hello worl'); }; //这创建了一个模块 //如何引用模块 //1.require(); var hello = require('./module.js'); hello.hello(); //2. var {hello} = require('./module.js'); hello(); 2.服务端的模块 //服务端的模块 var ht

pandas入门学习--------------------------(一)

使用pandas,首先需要熟悉它的2个主要的数据结构:Series和DataFrame. Series series是一种类似于一维数组的的对象,它由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(索引)组成. In [1]: from pandas import Series,DataFrame In [2]: import pandas as pd In [3]: obj=Series([4,7,-5,3]) In [4]: obj Out[4]: 0 4 1 7 2 -5 3

java入门学习(二)

一.类和对象 1.开篇瞎BB 物以类聚. 世间万物皆对象,对象是能接触到的实体.类是一组有相同属性和方法的对象的集合,或者说它们的特征提取,类是一种抽象的概念.类由属性和方法组成,属性是它的各种静态的特征,方法是它能干啥.<易>有云,“物以类聚,人以群分”. 打个比喻,有一群人都在追一个很可爱的姑娘.这群人可以抽象出一个类,他们有相同的属性,比如都喜欢这姑娘,都是男孩子.他们有一些相同的方法,什么送花儿呀,请吃饭呀,请看电影呀,陪姑娘聊天呀.所以呀,他们是一个类.而单独的一个人就是一个对象,这

pandas入门学习

https://www.cnblogs.com/oklizz/p/11766788.html  pandas速查手册 https://www.pypandas.cn/docs/getting_started/tutorials.html#%E5%AE%98%E6%96%B9%E6%8C%87%E5%8D%97    官方指南中文版 原文地址:https://www.cnblogs.com/xupanfeng/p/12650274.html