大家好,歡迎來到數據新手村的第十五天!在經過一整週的 NumPy 內功修煉後,我們已經具備了高效處理數值陣列的能力。
但是,真實世界的數據往往不是純粹的數字,它們還包含了欄位名稱、索引標籤、不同的資料類型,就像一張張 Excel 表格。為了解決這個問題,需要一把更強大的「瑞士刀」—— Pandas。
Pandas 是建立在 NumPy 之上的、專為處理表格型 (tabular) 和混雜資料而設計的 Python 函式庫。它是 Python 數據分析工具鏈中最核心、使用最頻繁的工具。
如果說 NumPy 是數據的「發動機」,那麼 Pandas 就是圍繞這個發動機打造的、配備了智慧儀表板、GPS 導航和機械手臂的超級跑車。
Pandas 的核心優勢:
Index
和 Columns
,讓數據的選取與對齊變得直觀。NaN
(Not a Number) 處理機制。Pandas 有兩大核心資料結構:Series
(一維) 和 DataFrame
(二維)。今天先來認識可以看作是「帶有索引標籤的一維陣列」的 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
'''
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,學習如何處理我們熟悉的「二維表格」資料。敬請期待!