数据分析之Pandas(一):Series、DataFrame基本操作及索引对象

Pandas简介

  Pandas是python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来,目前由专注于Python数据包开发的PyData开发team继续开发和维护。Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。
  Pandas是基于NumPy构建的,是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具,让以NumPy为中心的应用变得快捷简单。

pandas数据结构

pandas主要有两种数据结构:

  • Series
    Series是一种类似于一维数组的对象,由一组数据以及一组与之相关的数据标签组成。仅由一组数据即可产生最简单的Series
  • DataFrame
    DataFrame是一个表格型的数据,含有一组有序的列,每列可以是不同的值类型。Pandas的dataframe可以存储许多种不同的数据类型,并且每一个坐标轴都有自己的标签。你可以把它想象成一个series的字典项。
      

Series操作

  1. 引入Pandas包,由于Series和DataFrame用的次数非常多,可以将其命名空间单独引入用起来更方便。下面是定义一个Series

    In [1]: from pandas import Series,DataFrame
    In [2]: import pandas
    In [3]: obj = Series([4,7,-5,3])
    In [4]: obj
    Out[4]: 
    0    4
    1    7
    2   -5
    3    3
    dtype: int64
  2. 通过Series的values和index属性获取其数组表示形式和索引对象

    In [5]: obj.values
    Out[5]: array([ 4,  7, -5,  3], dtype=int64)
    In [6]: obj[0]
    Out[6]: 4
    In [7]: obj.index
    Out[7]: RangeIndex(start=0, stop=4, step=1)
  3. 自定义索引:Series可以通过自定义索引改变series的索引值,默认会自动创建一个0到N-1的整数型索引。

    In [8]: obj2 = Series([4,7,-5,3],index=['d','b','a','c'])
    In [9]: obj2
    Out[9]: 
    d    4
    b    7
    a   -5
    c    3
    dtype: int64
    In [10]: obj2.index
    Out[10]: Index([u'd', u'b', u'a', u'c'], dtype='object')
    In [11]: obj2['d']
    Out[11]: 4
  4. 通过索引的方式获取单个或一组值

    In [15]: obj2[['c','a','d']]
    Out[15]: 
    c    3
    a   -5
    d    4
    dtype: int64
  5. 通过索引的方式修改单个或一组值

    In [16]: obj2['d']=6
    In [17]: obj2[['c','a','d']]
    Out[17]: 
    c    3
    a   -5
    d    6
    dtype: int64
    In [18]: obj2
    Out[18]: 
    d    6
    b    7
    a   -5
    c    3
    dtype: int64
  6. NumPy数组运算会保留索引还值之间的链接

    In [19]: obj2[obj2>0]
    Out[19]: 
    d    6
    b    7
    c    3
    dtype: int64
    
    In [20]: obj2*2
    Out[20]: 
    d    12
    b    14
    a   -10
    c     6
    dtype: int64
    
    In [23]: import numpy as np
    
    In [24]: np.exp(obj2)
    Out[24]: 
    d     403.428793
    b    1096.633158
    a       0.006738
    c      20.085537
    
  7. Series可以看成一个定长的有序字典,它可以用在许多原本需要字典参数的函数中:

    In [25]: 'b' in obj2
    Out[25]: True
    
    In [26]: 'e' in obj2
    Out[26]: False
    
  8. Python字典创建Series

    In [27]: data = {'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
    
    In [28]: obj3 = Series(data)
    
    In [29]: obj3
    Out[29]: 
    Ohio      35000
    Oregon    16000
    Texas     71000
    Utah       5000
    dtype: int64
  9. 查找data中与states中数据匹配的值

    In [30]: states = ['California','Ohio','Oregon','Texas']
    
    In [31]: obj4 = Series(data,index=states)
    
    In [32]: obj4
    Out[32]: 
    California        NaN
    Ohio          35000.0
    Oregon        16000.0
    Texas         71000.0
    dtype: float64
  10. Series能在算术运算中会自动对齐不同索引的数据

    obj3+obj4
    Out[33]: 
    California         NaN
    Ohio           70000.0
    Oregon         32000.0
    Texas         142000.0
    Utah               NaN
    dtype: float64

DataFrame操作

  1. 构建DataFrame的办法很多,通常是直接传入一个由等长列表或NumPy数组组成的字典

    In [40]: data = {'state':['Ohio','Ohio','Ohio','Ohio','Ohio'],'year':[2000,2001,2002,2001,2002],'pop':[1.5,1.7,3.6,2.4,2.9]}
    
    In [41]: frame = DataFrame(data)
    
    In [42]: frame
    Out[42]: 
       pop state  year
    0  1.5  Ohio  2000
    1  1.7  Ohio  2001
    2  3.6  Ohio  2002
    3  2.4  Ohio  2001
    4  2.9  Ohio  2002
  2. 通过字典标记的方式或熟悉的方式,可以将DataFrame的列获取为一个Series,返回的series拥有原DataFrame相同的索引,且其name属性已经被相应地设置

    In [43]: frame['state']
    Out[43]: 
    0    Ohio
    1    Ohio
    2    Ohio
    3    Ohio
    4    Ohio
    Name: state, dtype: object
    
    In [44]: frame.state
    Out[44]: 
    0    Ohio
    1    Ohio
    2    Ohio
    3    Ohio
    4    Ohio
    Name: state, dtype: object
  3. 按行获取,可通过loc获取

    In [52]: frame2.loc['three']
    Out[52]: 
    year     2002
    state    Ohio
    pop       3.6
    Name: three, dtype: object
  4. 将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度匹配,如果是一个Series,就会精确匹配DataFrame的索引,空位将被填充缺失值。为不存在的列赋值会创建出新列。

    In [54]: val = Series([-1.2,-1.5,-1.7],index=['two','four','five'])
    
    In [55]: frame2['debt']=val
    
    In [56]: frame2
    Out[56]: 
           year state  pop  debt
    one    2000  Ohio  1.5   NaN
    two    2001  Ohio  1.7  -1.2
    three  2002  Ohio  3.6   NaN
    four   2001  Ohio  2.4  -1.5
    five   2002  Ohio  2.9  -1.7
  5. 另一种常见的数据形式是嵌套字典,如果将它传给dataframe,就会被解释为:外层字典的键作为列,内层键作为行索引。

    In [58]: pop ={'Nevada':{2001:2.4,2002:2.9},'Ohio':{2000:1.5,2001:1.7,2002:3.6}}
    
    In [59]: frame3 = DataFrame(pop)
    
    In [60]: frame3
    Out[60]: 
          Nevada  Ohio
    2000     NaN   1.5
    2001     2.4   1.7
    2002     2.9   3.6

    也可以对结果进行转置

    frame3.T
    Out[61]: 
            2000  2001  2002
    Nevada   NaN   2.4   2.9
    Ohio     1.5   1.7   3.6

    表中列出了DataFrame构造器所能接收的数据

    DataFrame构造器所能接收的数据

  6. 跟Series一样,values属性也会以二维ndarray的形式返回dataframe中的数据

    In [62]: frame3.values
    Out[62]: 
    array([[ nan,  1.5],
           [ 2.4,  1.7],
           [ 2.9,  3.6]])

索引对象

Pandas的索引对象负责管理轴标签和其他元数据。构建Series和DataFrame时,所用到的任何数组或其他序列的标签都会被转换成一个Index。

In [63]: obj = Series(range(3),index=['a','b','c'])
In [64]: index = obj.index

In [65]: index
Out[65]: Index([u'a', u'b', u'c'], dtype='object')

In [66]: index[1:]
Out[66]: Index([u'b', u'c'], dtype='object')

In [67]: index[1]='d'
Traceback (most recent call last):

  File "<ipython-input-67-d3f90986bdb1>", line 1, in <module>
    index[1]='d'

  File "C:\ProgramData\Anaconda2\lib\site-packages\pandas\core\indexes\base.py", line 1620, in __setitem__
    raise TypeError("Index does not support mutable operations")

TypeError: Index does not support mutable operations

index对象是不可修改的,如果对其进行修改,会抛出异常。这样有利于index在多个数据结构之间安全共享

pandas中主要的index对象

说明
Index最泛化的Index对象,将轴标签表示为一个由Python对象组成的NumPy数组
Int64Index针对整数的特殊Index
MultiIndex“层次化”索引现象,表示单个轴上的多层索引,可以看做由元组组成的数组
DatetimeIndex存储纳秒级时间戳(用NumPy的datetime64类型)
PeriodIndex针对Period数据(时间间隔)的特殊Index

Index的方法和属性

方法说明
append连接另一个Index对象,产生一个新的Index
diff计算差集,并得到一个Index
intersection计算交集
union计算并集
isin计算一个指示各值是否都包含在参数集合中的布尔型数值
delete连接另一个Index对象,产生一个新的Index
drop删除传入的值,并得到新的Index
insert将元素插入到索引i处,并得到新的Index
is_monottonic当各元素均大于等于前一个元素时,返回True
is_unique当Index没有重复值时,返回True
unique计算Index中唯一值的数组
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值