Pandas 基於 NumPy,以 Series
、DataFrame
、Panel
資料結構來表現一維、二維、三維等資料,可以用更具體的 index
、column
、items
名稱來存取資料,而不只是面對索引數字。
Series
可用來表現一維資料,可看成是 NumPy 一維陣列的封裝,在最簡單的情境下,建構 Series
就像是建構 NumPy 一維陣列。例如:
import pandas as pd
nums1 = pd.Series([1, 2, 3])
nums2 = nums1 + 10
print(nums1)
print(nums2)
看來就像是 NumPy,只不過是 np.array
換成了 pd.Series
?這是因為 Pandas 與 NumPy 有很好的相容性,許多 NumPy 的使用經驗都可以過渡到 Pandas 使用,例如這邊示範了〈Univerial 函式〉,以上會顯示的結果如下:
0 1
1 2
2 3
dtype: int64
0 11
1 12
2 13
dtype: int64
可以看到,Series
具有索引,〈NumPy 陣列索引〉中對一維 NumPy 陣列的索引方式,基本上都可以在 Series
上使用;然而不同的是,Series
可以指定其他的值作為索引,例如:
import pandas as pd
date = pd.Series([1975, 5, 26], index = ['年', '月', '日'])
print(date)
print(date['月']) # 以指定名稱作為索引
print(date[['年', '日']]) # 也可以用名稱作為索引陣列
執行結果如下:
年 1975
月 5
日 26
dtype: int64
5
年 1975
日 26
dtype: int64
可以指定其他值作為索引,乍看很像是鍵值成對的 dict
物件,你也可以使用 dict
來建立 Series
實例:
import pandas as pd
date = pd.Series({
'年' : 1975,
'月' : 5,
'日' : 26
})
print(date)
print(date['月'])
print(date[['年', '日']])
不過,Series
可以允許重複的索引名稱:
import pandas as pd
data1 = pd.Series({'a': 10, 'b': 20, 'c': 30, 'a': 40})
data2 = pd.Series([10, 20, 30, 40], index = ['a', 'b', 'c', 'a'])
print(data1)
print(data2)
這會顯示以下的結果:
a 40
b 20
c 30
dtype: int64
a 10
b 20
c 30
a 40
dtype: int64
因此,如果你的索引名稱會重複的話,就別使用 dict
來建構 Series
,因為你在組織 dict
時,鍵就不允許重複了;另外,自行指定 index
時,索引名稱數量必須與元素數量相同。
想要取出元素值時,可以透過 Series
的 values
,這會取得 NumPy 陣列,想要取得索引名稱時,可以透過 index
,這會取得 pandas.core.indexes.base.Index
的子類別實例,其上擁有許多可用的方法,也就是說,想針對索引名稱作運算,也是十分方便。