pandas入门学习--------------------------

Posted catxjd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:pythonpython36libsite-packagespandascoreindexesase.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

 

以上是关于pandas入门学习--------------------------的主要内容,如果未能解决你的问题,请参考以下文章

Pandas高级数据分析快速入门之六——机器学习预测分析篇

pandas库学习笔记Series入门学习

pandas入门学习

pandas入门学习--------------------------

pandas入门学习--------------------------

机器学习入门 05 —— Pandas使用