import pandas as pd import numpy as np import names ``` 寫在前面的話: 1、series與array型別的不同之處為series有索引,而另一個沒有;series中的資料必須是一維的,而array型別不一定 2、可以把series看成一個定長的有序字典,可以透過shape,index,values等得到series的屬性 ``` # 1、series的建立 ``` (1)由列表或numpy陣列建立 預設索引為0到N-1的整數型索引,如s1; 可以透過設定index引數指定索引,如s2; 透過這種方式建立的series,不是array的副本,即對series操作的同時也改變了原先的array陣列,如s3 (2)由字典建立 字典的鍵名為索引,鍵值為值,如s4; ``` n1 = np.array([1, 4, 5, 67, 7, 43, ]) s1 = pd.Series(n1) # print(s1) ``` 0 1 1 4 2 5 3 67 4 7 5 43 dtype: int32 ``` s2 = pd.Series(n1, index=[`a`, `b`, `c`, `d`, `e`, `f`]) # print(s2) ``` a 1 b 4 c 5 d 67 e 7 f 43 dtype: int32 ``` # print(n1) ``` [ 1 4 5 67 7 43] ``` s1[2] = 100 s3 = s1 # print(s3) ``` 0 1 1 4 2 100 3 67 4 7 5 43 dtype: int32 ``` # print(n1) ``` [ 1 4 100 67 7 43] ``` dict1 = {} for i in range(10, 15): # names.get_last_name(),隨機生成英文名字 dict1[names.get_last_name()] = i s4 = pd.Series(dict1) # print(s4) ``` Poole 10 Allen 11 Davis 12 Roland 13 Brehm 14 dtype: int64 ``` # 2、series的索引 ``` (1)透過index取值,可以透過下標獲取,也可以透過指定索引獲取,如s6,s7 (2)透過.loc[](顯示索引)獲取,這種方式只能獲取顯示出來的索引,無法透過下標獲取,如s7(推薦) (3)隱式索引,使用整數作為索引值,使用.icol[],如s9(推薦) ``` s5 = pd.Series(np.array([1, 5, 9, 7, 6, 4, 52, 8]), index=[list(`abcdefgh`)]) # print(s5) ``` a 1 b 5 c 9 d 7 e 6 f 4 g 52 h 8 dtype: int32 ``` s6 = s5[2] # print(s6) ``` 9 ``` s7 = s5[`c`] # print(s7) ``` c 9 dtype: int32 ``` s8 = s5.loc[`c`] # print(s8) ``` c 9 dtype: int32 ``` s9 = s5.iloc[2] # print(s9) ``` 9 ``` # 3、series的切片 ``` 1、series的切片和列表的用法類似,不同之處在於建議使用.loc[:]和.iloc[:],如s10和s11。當然直接使用[:]也可以。 2、當遇到特別長的series,我們支取出前5條或後5條資料時可以直接使用.head()或.tail() ``` s5 = pd.Series(np.array([1, 5, 9, 7, 6, 4, 52, 8]), index=[list(`abcdefgh`)]) # print(s5) ``` a 1 b 5 c 9 d 7 e 6 f 4 g 52 h 8 dtype: int32 ``` s10 = s5.loc[`b`:`g`] # print(s10) ``` b 5 c 9 d 7 e 6 f 4 g 52 dtype: int32 ``` s11 = s5.iloc[1:7] # print(s11) ``` b 5 c 9 d 7 e 6 f 4 g 52 dtype: int32 ``` # 4、關於NaN ``` (1)NaN是代表空值, 但不等於None。兩者的資料型別不一樣,None的型別為<class `NoneType`>,而NaN的型別為<class `float`>; (2)可以使用pd.isnull(),pd.notnull(),或自帶isnull(),notnull()函式檢測缺失資料 ``` # print(type(None),type(np.nan)) ``` <class `NoneType`> <class `float`> ``` s12 = pd.Series([1,2,None,np.nan],index=list(`烽火雷電`)) # print(s12) ``` 烽 1.0 火 2.0 雷 NaN 電 NaN dtype: float64 ``` # print(pd.isnull(s12)) ``` 烽 False 火 False 雷 True 電 True dtype: bool ``` # print(pd.notnull(s12)) ``` 烽 True 火 True 雷 False 電 False dtype: bool ``` # print(s12.notnull()) ``` 烽 True 火 True 雷 False 電 False dtype: bool ``` # print(s12.isnull()) ``` 烽 False 火 False 雷 True 電 True dtype: bool ``` # 取出series中不為空的值 # print(s12[s12.notnull()]) ``` 烽 1.0 火 2.0 dtype: float64 ``` # series的name屬性 ``` ``` s12.name = `風水` # print(s12) ``` 烽 1.0 火 2.0 雷 NaN 電 NaN Name: 風水, dtype: float64 ```