pandas是Python中一個非常流行的數據處理庫,它提供了很多方便的數據結構和工具,讓我們能夠輕鬆地處理表格數據、時間序列數據等。在pandas中,最基礎也最常用的數據結構之一就是Series。可以把Series理解爲“帶有標籤的一維數組”——它不僅包含數據本身,還包含了一個用來標識每個數據點的“標籤”(也就是我們常說的“索引”)。
一、創建Series¶
要使用Series,首先需要導入pandas庫,通常我們會簡寫爲import pandas as pd。下面是幾種常見的創建方式:
1. 從列表創建(默認索引)¶
如果我們有一個普通的Python列表,就可以直接把它傳給pd.Series()來創建一個Series。例如:
import pandas as pd
# 定義一個列表
data = [10, 20, 30, 40]
# 創建Series(默認索引是0,1,2,3)
s = pd.Series(data)
print(s)
輸出結果:
0 10
1 20
2 30
3 40
dtype: int64
這裏左邊的數字(0,1,2,3)就是Series的索引(默認從0開始),右邊的是數據。如果需要給Series命名,可以用name參數:
s = pd.Series(data, name="成績")
print(s)
輸出會在索引上方顯示Name: 成績。
2. 從字典創建(鍵作爲索引)¶
如果數據是鍵值對形式(比如Python字典),pd.Series()會自動把字典的鍵作爲索引,值作爲數據。例如:
data_dict = {"語文": 90, "數學": 85, "英語": 95, "物理": 80}
s = pd.Series(data_dict)
print(s)
輸出結果:
語文 90
數學 85
英語 95
物理 80
dtype: int64
這裏的索引就是字典的鍵(語文、數學等),數據是對應的值。
3. 從標量值創建(重複生成)¶
如果想創建一個所有元素都是同一個值的Series,可以傳入一個標量和長度參數。例如,創建一個長度爲5、值爲10的Series:
s = pd.Series(10, range(5)) # 用range(5)指定索引爲0-4
print(s)
輸出:
0 10
1 10
2 10
3 10
4 10
dtype: int64
二、Series的基本屬性¶
每個Series都有幾個核心屬性,幫助我們瞭解它的結構:
- values:獲取Series的數據本身(返回numpy數組)
print(s.values) # 例如:[90 85 95 80]
- index:獲取Series的索引(標籤)
print(s.index) # 例如:Index(['語文', '數學', '英語', '物理'], dtype='object')
- name:Series的名稱(如果創建時指定了name參數)
print(s.name) # 例如:"成績"
- shape:返回形狀(一維Series的shape是(長度,))
print(s.shape) # 例如:(4,)(4個元素)
三、索引的理解與操作¶
索引是Series的“靈魂”,它讓我們能通過標籤快速定位數據。
1. 自定義索引¶
默認索引是0,1,2…,但我們可以自定義索引(如字符串、日期等),讓數據更易讀。例如:
dates = ["週一", "週二", "週三", "週四", "週五"]
sales = [150, 200, 180, 220, 190]
s = pd.Series(sales, index=dates, name="銷售額(元)")
print(s)
輸出:
週一 150
週二 200
週三 180
週四 220
週五 190
Name: 銷售額(元), dtype: int64
2. 通過索引訪問數據¶
- 按標籤訪問(loc):已知標籤時,用
loc獲取數據。例如:
print(s.loc["週三"]) # 輸出:180(獲取標籤爲"週三"的數據)
- 按位置訪問(iloc):已知位置時,用
iloc獲取數據。例如:
print(s.iloc[2]) # 輸出:180(獲取第2個位置的數據,即第三個元素)
3. 切片操作¶
- 標籤切片(包含結束標籤):用
loc,例如:
print(s.loc["週二":"週四"]) # 輸出週二:200, 週三:180, 週四:220
- 位置切片(不包含結束位置):用
iloc,例如:
print(s.iloc[1:4]) # 輸出週二:200, 週三:180, 週四:220
4. 修改索引¶
索引不可直接修改單個元素,但可以整體替換:
s.index = ["Mon", "Tue", "Wed", "Thu", "Fri"] # 替換所有索引
print(s)
四、數據操作與分析¶
1. 基本統計方法¶
Series內置了求和、均值、最大值等統計方法:
s = pd.Series([10, 20, 30, 40])
print(s.sum()) # 100(求和)
print(s.mean()) # 25.0(均值)
print(s.max()) # 40(最大值)
2. 條件篩選¶
通過布爾條件篩選數據:
s = pd.Series([10, 20, 30, 40])
filtered = s[s > 25] # 篩選出大於25的數據
print(filtered) # 輸出:30, 40
五、實戰案例:綜合練習¶
假設我們要記錄某商店一週的客流量,用Series存儲並分析:
import pandas as pd
# 1. 創建帶日期索引的客流量Series
days = ["週一", "週二", "週三", "週四", "週五", "週六", "週日"]
passengers = [500, 480, 520, 600, 550, 700, 650]
s = pd.Series(passengers, index=days, name="客流量")
# 2. 查看數據
print("=== 一週客流量數據 ===")
print(s)
# 3. 按標籤訪問週六客流量
print("\n週六客流量:", s.loc["週六"]) # 輸出:700
# 4. 計算總客流量和平均客流量
total = s.sum()
avg = s.mean()
print(f"\n總客流量:{total}人,平均每天:{avg:.1f}人")
# 5. 篩選客流量超過600人的日期
busy_days = s[s > 600]
print("\n客流量超過600人的日期:")
print(busy_days)
輸出結果:
=== 一週客流量數據 ===
週一 500
週二 480
週三 520
週四 600
週五 550
週六 700
週日 650
Name: 客流量, dtype: int64
週六客流量: 700
總客流量:4050人,平均每天:578.6人
客流量超過600人的日期:
週六 700
週日 650
dtype: int64
總結¶
Series是pandas中最基礎的數據結構,掌握它是數據處理的關鍵。核心要點:
- Series = 數據 + 標籤(索引),索引讓數據更易管理
- 支持列表、字典、標量創建,靈活適配數據來源
- 用loc(標籤)和iloc(位置)訪問數據,避免混淆
- 內置統計和篩選方法,快速實現數據初步分析
多動手嘗試不同場景(如用日期索引、字符串索引),熟悉索引操作和數據處理邏輯,就能逐步掌握Series的使用。