zoukankan      html  css  js  c++  java
  • 数据分析之Pandas(二) Series入门

    Pandas基本的数据结构是Series和DataFrame。Series是1-D的,DataFrame是2-D的。

    首先引入Pandas和Numpy

    from pandas import Series, DataFrame
    import pandas as pd
    import numpy as np
    

    Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。
    创建一个Series的最基本方法是:

    s = pd.Series(data, index=index)
    

    这里,data指代许多不同的数据类型:

    • a Python dict
    • an ndarray
    • a Python list
    • a scalar value

    仅由一组数据即可产生最简单的Series,通过传递一个list来创建一个Series,pandas会默认创建整形索引:

    In [2]: obj = Series([4, 7, -5, 3])
    In [3]: obj
    Out[3]:
    0    4
    1    7
    2   -5
    3    3
    dtype: int64
    

    我们可以通过Series的values和index属性获取其数组表示形式和索引对象:

    In [4]: obj.values
    Out[4]: array([ 4,  7, -5,  3], dtype=int64)
    
    In [5]: obj.index
    Out[5]: RangeIndex(start=0, stop=4, step=1)
    

    通常,我们希望所创建的Series带有一个可以对各个数据点进行标记的索引:

    In [7]: obj2 = Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
    
    In [8]: obj2
    Out[8]:
    d    4
    b    7
    a   -5
    c    3
    dtype: int64
    In [9]: obj2.index
    Out[9]: Index([u'd', u'b', u'a', u'c'], dtype='object')
    

    与普通的NumPy数组相比,你可以通过索引的方式选取Series中的单个或一组值:

    In [10]: obj2['a']
    Out[10]: -5
    
    In [11]: obj2['d'] = 6
    
    In [12]: obj2[['c', 'a', 'd']]
    Out[12]:
    c    3
    a   -5
    d    6
    

    NumPy数组运算(如根据布尔型数组进行过滤、标量乘法、应用数学函数)都会保留索引和值之间的连接:

    In [13]: obj2
    Out[13]:
    d    6
    b    7
    a   -5
    c    3
    dtype: int64
    
    In [14]: obj2[obj2 > 0]
    Out[14]:
    d    6
    b    7
    c    3
    dtype: int64
    
    In [15]: obj * 2
    Out[15]:
    0     8
    1    14
    2   -10
    3     6
    dtype: int64
    
    In [18]: np.exp(obj2)
    Out[18]:
    d     403.428793
    b    1096.633158
    a       0.006738
    c      20.085537
    dtype: float64
    

    还可以将Series看成是一个定长的有序字典,因为它是索引值到数据值的一个映射。它可以在许多需要字典参数的函数中:

    In [19]: 'b' in obj2
    Out[19]: True
    
    In [20]: 'e' in obj2
    Out[20]: False
    

    如果数据存放在一个python字典中,也可以直接通过这个字典来创建Series:

    In [21]: sdata = {'Ohio':3500, 'Texas':7100, 'Oregon':1600, 'Utah':5000}
    
    In [22]: obj3 = Series(sdata)
    
    In [23]: obj3
    Out[23]:
    Ohio      3500
    Oregon    1600
    Texas     7100
    Utah      5000
    dtype: int64
    

    如果只传入一个字典,则结果Series中的索引就是原字典的键(有序排列)。

    In [24]: states = ['California', 'Ohio', 'Oregon', 'Texas']
    
    In [25]: obj4 = Series(sdata, index=states)
    
    In [26]: obj4
    Out[26]:
    California       NaN
    Ohio          3500.0
    Oregon        1600.0
    Texas         7100.0
    dtype: float64
    

    在这个例子中,sdata中跟states索引相匹配的那3个值会被找出来并放在相应的位置上,但由于“California”所对应的sdata值找不到,所以其结果就为NaN(即“非数字”(not a number),在pandas中,它用于表示缺失或NA值)。pandas的isnull和notnull函数可用于检测缺失数据:

    In [29]: pd.isnull(obj4)
    Out[29]:
    California     True
    Ohio          False
    Oregon        False
    Texas         False
    dtype: bool
    
    In [30]: pd.notnull(obj4)
    Out[30]:
    California    False
    Ohio           True
    Oregon         True
    Texas          True
    dtype: bool
    

    Series也有类似的实例方法:

    In [31]: obj4.isnull()
    Out[31]:
    California     True
    Ohio          False
    Oregon        False
    Texas         False
    dtype: bool
    
    In [32]: obj4.notnull()
    Out[32]:
    California    False
    Ohio           True
    Oregon         True
    Texas          True
    dtype: bool
    

    对于许多应用而言,Series最重要的一个功能是:它在算术运算中会自动对齐不同索引的数据。

    In [33]: obj3
    Out[33]:
    Ohio      3500
    Oregon    1600
    Texas     7100
    Utah      5000
    dtype: int64
    
    In [34]: obj4
    Out[34]:
    California       NaN
    Ohio          3500.0
    Oregon        1600.0
    Texas         7100.0
    dtype: float64
    
    In [35]: obj3 + obj4
    Out[35]:
    California        NaN
    Ohio           7000.0
    Oregon         3200.0
    Texas         14200.0
    Utah              NaN
    dtype: float64
    

    Series对象本身及其索引都有一个name属性,该属性跟pandas其他的关键功能关系非常密切:

    In [36]: obj4.name = 'population'
    
    In [37]: obj4.index.name = 'state'
    
    In [38]: obj4
    Out[38]:
    state
    California       NaN
    Ohio          3500.0
    Oregon        1600.0
    Texas         7100.0
    Name: population, dtype: float64
    

    Series的索引可以通过赋值的方式就地修改:

    In [39]: obj
    Out[39]:
    0    4
    1    7
    2   -5
    3    3
    dtype: int64
    
    In [40]: obj.index = ['Bob', 'Steve', 'Jeff', 'Ryan']
    
    In [41]: obj
    Out[41]:
    Bob      4
    Steve    7
    Jeff    -5
    Ryan     3
    dtype: int64
  • 相关阅读:
    开发基于键值对形式的语言管理器LauguageManager
    基于Json(键值对)配置文件的配置管理器
    Unity换装效果
    技能冷却效果的制作
    c#中的反射
    委托和事件的区别
    字典
    有序列表
    链表

  • 原文地址:https://www.cnblogs.com/jinhaolin/p/5979793.html
Copyright © 2011-2022 走看看