Pandas兩個主要資料結構之一——Series
阿新 • • 發佈:2022-01-15
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