Pandas Series

Series 是 Pandas 的一維資料結構,類似於 Python 的 list,但每個元素都有一個索引標籤(index)。你可以把 Series 想像成一個有標籤的陣列,或是 DataFrame 中的一個欄位。

建立 Series

從 list 建立

import pandas as pd

# 從 list 建立 Series
s = pd.Series([10, 20, 30, 40])
print(s)

輸出:

0    10
1    20
2    30
3    40
dtype: int64

左邊的數字是索引(index),右邊是對應的值。

自訂索引

s = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
print(s)

輸出:

a    10
b    20
c    30
d    40
dtype: int64

從 dict 建立

data = {'apple': 100, 'banana': 200, 'orange': 150}
s = pd.Series(data)
print(s)

輸出:

apple     100
banana    200
orange    150
dtype: int64

Dictionary 的 key 會自動成為索引。

存取元素

使用索引標籤

s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])

print(s['a'])      # 10
print(s[['a', 'c']])  # 取多個元素

使用位置

s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])

print(s[0])        # 10
print(s[-1])       # 30
print(s[0:2])      # 切片

Series 屬性

s = pd.Series([10, 20, 30], index=['a', 'b', 'c'], name='numbers')

print(s.values)    # array([10, 20, 30])
print(s.index)     # Index(['a', 'b', 'c'], dtype='object')
print(s.dtype)     # int64
print(s.name)      # numbers
print(len(s))      # 3

Series 運算

Series 支援向量化運算,可以對所有元素同時進行計算:

s = pd.Series([10, 20, 30, 40])

print(s + 5)       # 每個元素加 5
print(s * 2)       # 每個元素乘 2
print(s > 20)      # 布林運算

輸出:

0    15
1    25
2    35
3    45
dtype: int64

0    20
1    40
2    60
3    80
dtype: int64

0    False
1    False
2     True
3     True
dtype: bool

常用方法

s = pd.Series([3, 1, 4, 1, 5, 9, 2, 6])

print(s.sum())      # 31(總和)
print(s.mean())     # 3.875(平均)
print(s.max())      # 9(最大值)
print(s.min())      # 1(最小值)
print(s.std())      # 標準差
print(s.unique())   # [3 1 4 5 9 2 6](不重複的值)
print(s.value_counts())  # 各值出現的次數

處理缺失值

s = pd.Series([1, 2, None, 4, None])

print(s.isnull())    # 找出缺失值
print(s.dropna())    # 刪除缺失值
print(s.fillna(0))   # 用 0 填補缺失值

Series vs List

特性SeriesList
索引可自訂標籤索引只能用數字索引
資料型別單一型別可混合型別
運算支援向量化運算需要迴圈
效能較快(底層是 NumPy)較慢

Series 是 DataFrame 的組成單位。當你從 DataFrame 取出一個欄位時,得到的就是一個 Series。在實務上,你更常操作的會是 DataFrame。