1. 前言:為什么需要 Pandas 數據結構?
在數據處理和分析中,我們需要高效的方式來存儲和操作結構化數據。Python 原生的列表(List)和字典(Dict)雖然靈活,但缺乏針對數據分析的優化。Pandas 提供了兩種核心數據結構:
-
Series
:一維帶標簽數組(類似增強版列表) -
DataFrame
:二維表格型數據結構(類似 Excel 表格)
?
它們支持快速查詢、自動對齊、缺失值處理、高效計算等特性,是數據分析的基礎。
2. Series:一維帶標簽數組
2.1 創建 Series
Series 由數據(值) + 索引(標簽)組成,可以通過列表、字典或 NumPy 數組創建:
import pandas as pd
import numpy as np# 從列表創建(默認索引為 0, 1, 2...)
s1 = pd.Series([10, 20, 30, 40])
print(s1)
"""
0 10
1 20
2 30
3 40
dtype: int64
"""# 從字典創建(鍵自動變為索引)
s2 = pd.Series({'A': 90, 'B': 80, 'C': 70})
print(s2)
"""
A 90
B 80
C 70
dtype: int64
"""# 自定義索引
s3 = pd.Series([1.1, 2.2, 3.3], index=['X', 'Y', 'Z'])
print(s3)
"""
X 1.1
Y 2.2
Z 3.3
dtype: float64
"""
2.2 Series 的屬性和方法
屬性/方法 | 說明 | 示例 |
---|---|---|
s.values | 獲取值數組 | s1.values ?→?[10, 20, 30, 40] |
s.index | 獲取索引 | s3.index ?→?Index(['X', 'Y', 'Z']) |
s.dtype | 數據類型 | s2.dtype ?→?int64 |
s.shape | 形狀 | s1.shape ?→?(4,) |
s.head(n) | 前 n 行 | s1.head(2) ?→ 顯示前 2 個值 |
s.isna() | 檢查缺失值 | pd.Series([1, None]).isna() ?→?[False, True] |
?2.3 Series 的操作
# 向量化運算(自動對齊索引)
s4 = pd.Series([1, 2, 3], index=['A', 'B', 'C'])
s5 = pd.Series([10, 20, 30], index=['B', 'C', 'D'])
print(s4 + s5)
"""
A NaN # A 只在 s4 中存在
B 12.0 # B 在兩者中都存在
C 23.0
D NaN # D 只在 s5 中存在
dtype: float64
"""# 條件篩選
print(s2[s2 > 80]) # 輸出大于 80 的值
"""
A 90
dtype: int64
"""
?
3. DataFrame:二維表格型數據結構
3.1 創建 DataFrame
DataFrame 可以看作多個 Series 的集合,類似于 Excel 表格或 SQL 表:
# 從字典創建(鍵是列名,值是數據)
data = {'Name': ['Alice', 'Bob', 'Charlie'],'Age': [25, 30, 35],'Score': [88.5, 92.0, 78.5]
}
df = pd.DataFrame(data)
print(df)
"""Name Age Score
0 Alice 25 88.5
1 Bob 30 92.0
2 Charlie 35 78.5
"""# 從列表創建(需指定列名)
data = [['Apple', 5], ['Banana', 3], ['Orange', 8]]
df2 = pd.DataFrame(data, columns=['Fruit', 'Count'])
print(df2)
"""Fruit Count
0 Apple 5
1 Banana 3
2 Orange 8
"""
?
3.2 DataFrame 的屬性和方法
屬性/方法 | 說明 | 示例 |
---|---|---|
df.columns | 列名 | df.columns ?→?Index(['Name', 'Age', 'Score']) |
df.index | 行索引 | df.index ?→?RangeIndex(start=0, stop=3) |
df.shape | 形狀 | df.shape ?→?(3, 3) |
df.dtypes | 每列數據類型 | df.dtypes ?→?Name: object, Age: int64, Score: float64 |
df.head(n) | 前 n 行 | df.head(2) ?→ 顯示前 2 行 |
df.describe() | 統計摘要 | df.describe() ?→ 計算均值、標準差等 |
?
3.3 DataFrame 的操作
(1)選擇數據
# 選擇列(返回 Series)
print(df['Name']) # 或 df.Name
"""
0 Alice
1 Bob
2 Charlie
Name: Name, dtype: object
"""# 選擇多列(返回 DataFrame)
print(df[['Name', 'Score']])# 選擇行(使用 loc/iloc)
print(df.loc[1]) # 按標簽選擇(第 2 行)
print(df.iloc[0:2]) # 按位置選擇(前 2 行)
?(2)條件篩選
# 篩選 Age > 25 的行
print(df[df['Age'] > 25])
"""Name Age Score
1 Bob 30 92.0
2 Charlie 35 78.5
"""# 多條件篩選(使用 & 或 |)
print(df[(df['Age'] > 25) & (df['Score'] > 80)])
?(3)增刪改列
# 新增列
df['Pass'] = df['Score'] >= 80
print(df)
"""Name Age Score Pass
0 Alice 25 88.5 True
1 Bob 30 92.0 True
2 Charlie 35 78.5 False
"""# 為每個學生添加性別信息
df['Gender'] = ['Female', 'Male', 'Male'] # 順序對應原數據的行
print(df)
"""Name Age Score Gender
0 Alice 25 88.5 Female
1 Bob 30 92.0 Male
2 Charlie 35 78.5 Male
"""# 刪除列
df.drop('Pass', axis=1, inplace=True) # axis=1 表示列
?
4. Series vs DataFrame 對比
特性 | Series | DataFrame |
---|---|---|
維度 | 一維 | 二維 |
索引 | 單索引(行) | 行索引 + 列索引 |
數據形式 | 單列數據 | 多列數據(多個 Series 的集合) |
適用場景 | 單一變量分析(如溫度序列) | 多變量分析(如學生成績表) |
?
5. 總結
-
Series
:一維數據,適合存儲單列數據(如時間序列、傳感器數據)。 -
DataFrame
:二維表格,適合處理多列結構化數據(如 CSV、Excel 數據)。 -
兩者均支持自動對齊、向量化運算、缺失值處理,是數據分析的核心工具。
練習建議:
-
創建一個包含學生信息的 DataFrame,并練習增刪改查操作。
-
嘗試用 Series 存儲某城市一周的溫度數據,并計算平均溫度。
?
?
?
?