1. 程式人生 > 其它 >Pandas兩個主要資料結構之一——Series

Pandas兩個主要資料結構之一——Series

Series是一種類似於一維陣列的物件,它由一組資料(各種Numpy資料型別)以及一組與之相關的資料標籤(即索引)構成。

建立Series

  • 如果沒有為資料指定索引,就會自動建立0到N-1的整數型索引。

    In [2]: obj = pd.Series([4, 7, -5, 3])
    
    In [3]: obj
    Out[3]: 
    0    4
    1    7
    2   -5
    3    3
    dtype: int64
    
  • 建立帶有對各資料點進行標記索引的Series

    In [6]: obj2 = pd.Series([1, 2, 3, 4], index=['d', 'b', 'c', 'a'])
    
    In [7]: obj2
    Out[7]: 
    d    1
    b    2
    c    3
    a    4
    dtype: int64
    
  • 如果資料被儲存在python字典中,也可以通過這個字典來建立Series

    In [8]: data = {'x': 30000, 'y': 40000, 'z': 50000, 'w': 60000}
    
    In [9]: obj3 = pd.Series(data)
    
    In [10]: obj3
    Out[10]: 
    x    30000
    y    40000
    z    50000
    w    60000
    dtype: int64
    
    # 若有索引未對應元素,則對應值為NaN
    In [11]: index = ['m', 'x', 'y', 'z']
    
    In [12]: obj4 = pd.Series(data, index)
    
    In [13]: obj4
    Out[13]: 
    m        NaN
    x    30000.0
    y    40000.0
    z    50000.0
    dtype: float64
    

索引Series

  • 可以通過Series的values和index屬性獲取其陣列表示形式和索引物件。

    In [14]: obj.values
    Out[14]: array([ 4,  7, -5,  3])
    
    In [15]: obj.index
    Out[15]: RangeIndex(start=0, stop=4, step=1)
    
  • 可以通過索引來選取Series的某個值或一組值

    In [16]: obj2['a']
    Out[16]: 4
    
    In [19]: obj2[['c', 'b', 'a']]
    Out[19]: 
    c    3
    b    2
    a    4
    dtype: int64
    
    In [20]: obj2[2:]
    Out[20]: 
    c    3
    a    4
    dtype: int64
    
  • Series也可以看作是一個定長的有序字典,因為它是索引值到資料值的一個對映。它可以用在很多原本需要字典引數的函式中:

    In [21]: 'b' in obj2
    Out[21]: True
    

Series的計算

  • Series的算術計算有一個重要特性:在算術運算中會自動對齊不同資料的索引,即在索引相同的值間進行計算。

    In [8]: obj3 + obj4
    Out[8]: 
    m         NaN
    w         NaN
    x     60000.0
    y     80000.0
    z    100000.0
    dtype: float64
    
    In [9]: obj3 - obj4
    Out[9]: 
    m    NaN
    w    NaN
    x    0.0
    y    0.0
    z    0.0
    dtype: float64
    
    In [10]: obj3 * obj4
    Out[10]: 
    m             NaN
    w             NaN
    x    9.000000e+08
    y    1.600000e+09
    z    2.500000e+09
    dtype: float64
    

    Numpy陣列運算(如根據布林型陣列進行過濾、標量乘法、應用數學函式)都會保留索引與值之間的連結。

    In [13]: obj2[obj2 > 0]
    Out[13]: 
    d    4
    b    7
    a    3
    dtype: int64
    

Series的一些其他操作

  • Pandas的innull和notnull函式可用於檢測缺失資料:

    In [21]: obj4.isnull()
    Out[21]: 
    m     True
    x    False
    y    False
    z    False
    dtype: bool
    
  • Series物件本身及索引都有一個name屬性

    In [23]: obj4.name = 'p'
    
    In [24]: obj4.index.name = 'q'
    
    In [25]: obj4
    Out[25]: 
    q
    m        NaN
    x    30000.0
    y    40000.0
    z    50000.0
    Name: p, dtype: float64
    
時來天地皆同力,運去英雄不自由。