iT邦幫忙

2025 iThome 鐵人賽

DAY 15
0
自我挑戰組

數據新手村:統計系畢業生 30 天打怪升級之旅系列 第 15

Day 15 - Pandas 登場與 Series 詳解

  • 分享至 

  • xImage
  •  

大家好,歡迎來到數據新手村的第十五天!在經過一整週的 NumPy 內功修煉後,我們已經具備了高效處理數值陣列的能力。

但是,真實世界的數據往往不是純粹的數字,它們還包含了欄位名稱、索引標籤、不同的資料類型,就像一張張 Excel 表格。為了解決這個問題,需要一把更強大的「瑞士刀」—— Pandas

什麼是 Pandas?

Pandas 是建立在 NumPy 之上的、專為處理表格型 (tabular)混雜資料而設計的 Python 函式庫。它是 Python 數據分析工具鏈中最核心、使用最頻繁的工具。

如果說 NumPy 是數據的「發動機」,那麼 Pandas 就是圍繞這個發動機打造的、配備了智慧儀表板、GPS 導航和機械手臂的超級跑車。

Pandas 的核心優勢:

  • 標籤化資料結構: 擁有帶有明確標籤的 IndexColumns,讓數據的選取與對齊變得直觀。
  • 靈活處理缺失資料: 內建強大的 NaN (Not a Number) 處理機制。
  • 強大的 I/O 工具: 能夠輕鬆讀寫來自 CSV、Excel、SQL 資料庫等多種來源的資料。
  • 豐富的時間序列處理功能。

Pandas 的核心物件之一:Series

Pandas 有兩大核心資料結構:Series (一維) 和 DataFrame (二維)。今天先來認識可以看作是「帶有索引標籤的一維陣列」的 Series

1. 創建 Series

創建 Series 最基本的方式是從一個 Python 列表中建立。

import pandas as pd

# 創建一個基本的 Series,注意左邊是索引,右邊是值
s = pd.Series([1, 2, 3, 4, 5])
print(s)

結果輸出:
0 1
1 2
2 3
3 4
4 5
dtype: int64

我們也可以在創建時,自訂索引 (index) 和名稱 (name)。

# 自定義索引
s = pd.Series([1, 2, 3, 4, 5], index=['A', 'B', 'C', 'D', 'E'])
# s = pd.Series([1, 2, 3, 4, 5], index=['1', '2', '3', '4', '5'])
print(s)
# 自定義name
s = pd.Series([1, 2, 3, 4, 5], index=['A', 'B', 'C', 'D', 'E'], name = '月份')
print(s)

結果輸出:
A 1
B 2
C 3
D 4
E 5
dtype: int64
A 1
B 2
C 3
D 4
E 5
Name: 月份, dtype: int64

# 通過字典的方式來創建
s = pd.Series({'a':1, 'b':2, 'c':3, 'd':4, 'e':5})
# print(s)
s1 = pd.Series(s, index=['a', 'd'])
print(s1)

結果輸出:
a 1
d 4
dtype: int64


  1. Series 的常用屬性
    和 NumPy 的 ndarray 類似,Series 物件也有一系列屬性,可以幫助我們快速了解它的結構。
'''
index:Series的索引對象
values:Series的值
dtype或dtypes:Series的元素類型
shape:Series的形狀
ndim:Series的維度
size:Series的元素個數
name:Series的名稱
loc[ ]:顯式索引,按標籤索引或切片
iloc[ ]:隱式索引,按位置索引或切片
at[ ]:使用標籤存取單一元素
iat[ ]:使用位置存取單一元素
'''
print(s)

結果輸出:
a 1
b 2
c 3
d 4
e 5
dtype: int64

print(s.index)
print(s.values)
print(s.shape, s.ndim, s.size)
s.name = 'test'
print(s.dtype, s.name)
print(s.loc['a']) # 用顯示的索引
print(s.loc['a':'d']) # 支持切片
print(s.iloc[0]) # 用隱示的索引
print(s.at['a'])
# print(s.at['a':'d']) # error:不支持切片
print(s.iat[0])

結果輸出:
Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
[1 2 3 4 5]
(5,) 1 5
int64 test
1
a 1
b 2
c 3
d 4
Name: test, dtype: int64
1
1
1


結語
今天我們正式踏入了 Pandas 的世界,並認識了它的一維資料結構 Series。我們學會了如何創建、檢視屬性、以及透過 loc 和 iloc 來存取資料。Series 是構成更複雜的 DataFrame 的基礎。

明天,Day 16,我們將進入 Pandas 的真正核心——DataFrame,學習如何處理我們熟悉的「二維表格」資料。敬請期待!


上一篇
Day 14 - NumPy 實戰演練與總結:牛刀小試
下一篇
Day 16 - Pandas DataFrame 的創建與資料存取
系列文
數據新手村:統計系畢業生 30 天打怪升級之旅16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言