Lesson3——Pandas Series結構

cute_Learner發表於2022-02-05

思維導圖

1 什麼是Series結構?

  Series 結構,也稱 Series 序列,是 Pandas 常用的資料結構之一,它是一種類似於一維陣列的結構,由一組資料值(value)一組標籤組成,其中標籤與資料值之間是一一對應的關係。

  Series 可以儲存任何資料型別,比如整數、字串、浮點數、Python 物件等,它的標籤預設為整數,從 0 開始依次遞增。Series 的結構圖,如下所示:

    

  通過標籤我們可以更加直觀地檢視資料所在的索引位置。

2 Series 物件

2.1 建立Series物件

  Pandas 使用 Series()  函式來建立 Series 物件,通過這個物件可以呼叫相應的方法和屬性,從而達到處理資料的目的:

import pandas as pd
s=pd.Series( data, index, dtype, copy)

  引數說明如下所示:

    

  我們也可以使用陣列、字典、標量值或者 Python 物件來建立 Series 物件。下面展示了建立 Series 物件的不同方法:

2.1.1 建立一個空Series物件

  使用以下方法可以建立一個空的 Series 物件,如下所示:

import pandas as pd
#輸出資料為空
s = pd.Series()
print(s)

  輸出結果如下:

Series([], dtype: float64)

2.1.2 ndarray建立Series物件

  ndarray 是 NumPy 中的陣列型別,當 data 是 ndarry 時,傳遞的索引必須具有與陣列相同的長度。假如沒有給 index 引數傳參,在預設情況下,索引值將使用是 range(n) 生成,其中 n 代表陣列長度,如下所示:

[0,1,2,3…. range(len(array))-1]

   使用預設索引,建立 Series 序列物件:

import pandas as pd
import numpy as np
data = np.array(['a','b','c','d'])
s = pd.Series(data)
print (s)

  輸出結果如下:

0   a
1   b
2   c
3   d
dtype: object

  上述示例中沒有傳遞任何索引,所以索引預設從 0 開始分配 ,其索引範圍為 0 到 len(data)-1,即 0 到 3。這種設定方式被稱為“隱式索引”。

  除了上述方法外,你也可以使用“顯式索引”的方法定義索引標籤,示例如下:

import pandas as pd
import numpy as np
data = np.array(['a','b','c','d'])
#自定義索引標籤(即顯示索引)
s = pd.Series(data,index=[100,101,102,103])
print(s)

  輸出結果:

100  a
101  b
102  c
103  d
dtype: object

2.1.3 dict建立Series物件

  您可以把 dict 作為輸入資料。如果沒有傳入索引時會按照字典的鍵來構造索引;反之,當傳遞了索引時需要將索引標籤與字典中的值一一對應。
  下面兩組示例分別對上述兩種情況做了演示。
  示例1,沒有傳遞索引時:

import pandas as pd
import numpy as np
data = {'a' : 0., 'b' : 1., 'c' : 2.}
s = pd.Series(data)
print(s)

  輸出結果:

a 0.0
b 1.0
c 2.0
dtype: float64

  示例 2,為index引數傳遞索引時:

import pandas as pd
import numpy as np
data = {'a' : 0., 'b' : 1., 'c' : 2.}
s = pd.Series(data,index=['b','c','d','a'])
print(s)

  輸出結果:

b 1.0
c 2.0
d NaN
a 0.0
dtype: float64

  當傳遞的索引值無法找到與其對應的值時,使用 NaN(非數字)填充。

2.1.4 標量建立Series物件

  如果 data 是標量值,則必須提供索引,示例如下:

import pandas as pd
import numpy as np
s = pd.Series(5, index=[0, 1, 2, 3])
print(s)

  輸出如下:

0  5
1  5
2  5
3  5
dtype: int64

  標量值按照 index 的數量進行重複,並與其一一對應。

3 訪問Series資料

  上述講解了建立 Series 物件的多種方式,那麼我們應該如何訪問 Series 序列中元素呢?分為兩種方式,一種是位置索引訪問;另一種是索引標籤訪問。

3.1 位置索引訪問

  這種訪問方式與 ndarray 和 list 相同,使用元素自身的下標進行訪問。我們知道陣列的索引計數從 0 開始,這表示第一個元素儲存在第 0 個索引位置上,以此類推,就可以獲得 Series 序列中的每個元素。下面看一組簡單的示例:

import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
print(s[0])  #位置下標
print(s['a']) #標籤下標

  輸出結果:

1
1

  通過切片的方式訪問 Series 序列中的資料,示例如下:

import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
print(s[:3])

  輸出結果:

a  1
b  2
c  3
dtype: int64

  如果想要獲取最後三個元素,也可以使用下面的方式:

import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
print(s[-3:])

  輸出結果:

c  3
d  4
e  5
dtype: int64

3.2 索引標籤訪問

  Series 類似於固定大小的 dict,把 index 中的索引標籤當做 key,而把 Series 序列中的元素值當做 value,然後通過 index 索引標籤來訪問或者修改元素值。
  示例1,使用索標籤訪問單個元素值:
import pandas as pd
s = pd.Series([6,7,8,9,10],index = ['a','b','c','d','e'])
print(s['a'])

  輸出結果:

6

  示例 2,使用索引標籤訪問多個元素值

import pandas as pd
s = pd.Series([6,7,8,9,10],index = ['a','b','c','d','e'])
print(s[['a','c','d']])

  輸出結果:

a    6
c    8
d    9
dtype: int64

  示例3,如果使用了 index 中不包含的標籤,則會觸發異常:

import pandas as pd
s = pd.Series([6,7,8,9,10],index = ['a','b','c','d','e'])
#不包含f值
print(s['f'])

  輸出結果:

......
KeyError: 'f'

4  Series常用屬性

  下面我們介紹 Series 的常用屬性和方法。在下表列出了 Series 物件的常用屬性。

    

   現在建立一個 Series 物件,並演示如何使用上述表格中的屬性。如下所示:

import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5))
print(s)

  輸出結果:

0    0.898097
1    0.730210
2    2.307401
3   -1.723065
4    0.346728
dtype: float64

  上述示例的行索引標籤是 [0,1,2,3,4]。

4.1 axes

import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5))
print ("The axes are:")
print(s.axes)

  輸出結果

The axes are:
[RangeIndex(start=0, stop=5, step=1)]

4.2 dtype

import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5))
print ("The dtype is:")
print(s.dtype)

  輸出結果:

The dtype is:
float64

4.3 empty

  返回一個布林值,用於判斷資料物件是否為空。示例如下:

import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5))
print("是否為空物件?")
print (s.empty)

  輸出結果:

是否為空物件?
False

4.4 ndim

  檢視序列的維數。根據定義,Series 是一維資料結構,因此它始終返回 1。

import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5))
print (s)
print (s.ndim)

  輸出結果:

0    0.311485
1    1.748860
2   -0.022721
3   -0.129223
4   -0.489824
dtype: float64
1

4.5 size

  返回 Series 物件的大小(長度)。

import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(3))
print (s)
#series的長度大小
print(s.size)

  輸出結果:

0   -1.866261
1   -0.636726
2    0.586037
dtype: float64
3

4.6 values

  以陣列的形式返回 Series 物件中的資料。

import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(6))
print(s)
print("輸出series中資料")
print(s.values)

  輸出結果:

0   -0.502100
1    0.696194
2   -0.982063
3    0.416430
4   -1.384514
5    0.444303
dtype: float64
輸出series中資料
[-0.50210028  0.69619407 -0.98206327  0.41642976 -1.38451433  0.44430257]

4.7 index

  該屬性用來檢視 Series 中索引的取值範圍。示例如下:

#顯示索引
import pandas as pd
s=pd.Series([1,2,5,8],index=['a','b','c','d'])
print(s.index)
#隱式索引
s1=pd.Series([1,2,5,8])
print(s1.index)

  輸出結果:

隱式索引:
Index(['a', 'b', 'c', 'd'], dtype='object')
顯示索引:
RangeIndex(start=0, stop=4, step=1)

5 Series常用方法

5.1 head()&tail()檢視資料

  如果想要檢視 Series 的某一部分資料,可以使用 head() 或者 tail() 方法。其中 head() 返回前 n 行資料,預設顯示前 5 行資料。示例如下:

import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5))
print ("The original series is:")
print (s)
#返回前三行資料
print (s.head(3))

  輸出結果:

原系列輸出結果:
0    1.249679
1    0.636487
2   -0.987621
3    0.999613
4    1.607751
head(3)輸出:
dtype: float64
0    1.249679
1    0.636487
2   -0.987621
dtype: float64

  tail() 返回的是後 n 行資料,預設為後 5 行。示例如下:

import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(4))
#原series
print(s)
#輸出後兩行資料
print (s.tail(2))

輸出結果:

原Series輸出:
0    0.053340
1    2.165836
2   -0.719175
3   -0.035178
輸出後兩行資料:
dtype: float64
2   -0.719175
3   -0.035178
dtype: float64

5.2 isnull()&nonull()檢測缺失值

  isnull() 和 nonull() 用於檢測 Series 中的缺失值。所謂缺失值,顧名思義就是值不存在、丟失、缺少。

  • isnull():如果為值不存在或者缺失,則返回 True。
  • notnull():如果值不存在或者缺失,則返回 False。

  其實不難理解,在實際的資料分析任物中,資料的收集往往要經歷一個繁瑣的過程。在這個過程中難免會因為一些不可抗力,或者人為因素導致資料丟失的現象。這時,我們可以使用相應的方法對缺失值進行處理,比如均值插值、資料補齊等方法。上述兩個方法就是幫助我們檢測是否存在缺失值。示例如下:

import pandas as pd
#None代表缺失資料
s=pd.Series([1,2,5,None])
print(pd.isnull(s))  #是空值返回True
print(pd.notnull(s)) #空值返回False

  輸出結果:

0    False
1    False
2    False
3     True
dtype: bool

notnull():
0     True
1     True
2     True
3    False
dtype: bool

 

相關文章