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的使用。

小夜