快轉到主要內容
  1. Posts/

Pandas 簡介 —— Series

·2 分鐘
Python Python Basics Pandas Data
目錄

Pandas 是一個基於 Python 的資料處理與分析工具,它提供了高效且靈活的資料結構,使處理結構化資料(如表格、時間序列等)變得更加簡單。Pandas 建立在 NumPy 之上,充分利用了 NumPy 的高效數值運算能力,同時引入了更高層次的資料操作介面,例如 DataFrameSeries,讓資料的讀取、篩選、清理、轉換與統計分析更加直觀和強大。本文將介紹 pandas 中的 Series。

Series
#

Series 是一種帶有索引的一維資料結構,類似於一個可以標上名字的陣列。每個資料值旁邊都有一個對應的索引(index),可以用索引快速地取出或操作資料。即使資料的順序改變,只要有索引在,也能輕鬆定位到正確的值。創建一個 Series 非常簡單:

import pandas as pd

data = pd.Series([10, 20, 30, 40, 50])
print(data)

我們就能得到

0    10
1    20
2    30
3    40
4    50
dtype: int64

左邊的是索引,右邊的是值。我們可以在 Series 中自己定義索引,

import pandas as pd

data = pd.Series([10, 20, 30], index=['a', 'c', 'b', 'f', 'k'])
print(data)

就能得到,

a    10
c    20
b    30
f    40
k    50
dtype: int64

這樣做的好處是,我們可以通過我們定義的索引來獲取特定元素,例如:data["a"], 當然原先的索引方法仍然是可以用的。為了區別開來,我們把原先的索引叫做 “位置索引”,我們自己定義的叫做 “標籤索引”。這兩個索引有細微不同之處:

  • 位置索引:data[1:3] 不包含結尾索引
  • 標籤索引:data[“a”:"c"] 包含結尾索引,所以會輸出前兩項

我們還可以放入一個列表來進行索引,例如:

data[["f", "a", "k"]] # 結果和 data[["3", "0", "4"]]

就能得到

f    40
a    10
k    50
dtype: int64

loc 和 iloc
#

當然爾,我們還可以用整數作為標籤,但這可能讓我們發生困惑,不知道索引取值和切片取值的時候是用哪一個。其實結果是:

  • 索引取值按照標籤
  • 切片取值按照位置

為了避免這種困惑,Pandas 提供給我們 lociloc 方法,loc 表示用標籤索引,iloc 表示用位置索引。使用方法如 data.iloc[3]

條件篩選
#

和 Numpy 裡的 array 一樣,我們也可以通過條件篩選符合條件的元素,例如: data[(data > 20) | (data < 40)]

字典創建 Series
#

我們還可以直接傳入一個字典用來創建 Series:

data = pd.Series({
    "青菜": 4.1,
    "白蘿蔔": 2.2,
    "西紅柿": 5.3,
    "土豆": 3.7,
    "黃瓜": 6.8
})

這樣key就對變成對應的index.

四則運算
#

在 Series 當中,我們也可以使用加減乘除來操作,只有擁有同樣索引的值會被加起來,其餘的都會變成 NaN. 例如:

s1 = pd.Series([1, 2, 3, 4, 5], index = ['a', 'b', 'c', 'd', 'e'])
s2 = pd.Series([50, 40, 30, 20, 10], index = ['a', 'b', 'd', 'e', 'f'])

s1+s2 就會得到:

a    51.0
b    42.0
c     NaN
d    34.0
e    25.0
f     NaN
dtype: float64

如果希望缺失的值有默認的話,可以使用 s1.add(s2, fill_value=0). 這樣的話可以得到:

a    51.0
b    42.0
c     3.0
d    34.0
e    25.0
f    10.0
dtype: float64

常用方法
#

  • min, max, mean, sum 這些常用的方法也出現在 Series當中
  • describe 方法可以告訴我們一些重要的統計信息

對元素分別操作
#

如果想要對每個元素分別操作,例如,我們擁有 scores 這個記錄了全班分數的 Series,我們想要設置 80 分以上為 A,60分以上為 B,其餘為 C 的話,我們可以先定義:

def grade_from_score(score):
  if score >= 80:
    return "A"
  elif score >= 60:
    return "B"
  else:
    return "C"

然後使用 apply,他會返回一個新的Series:

grades = scores.apply(grade_from_score)

我們也可以傳入匿名函數,關於匿名函數,詳見本 blog 中相應文章。

相關文章

Pandas 簡介 —— Dataframe
·2 分鐘
Python Python Basics Pandas Data
Pandas 簡介 —— 關於 CSV
·1 分鐘
Python Python Basics Pandas Csv Data
Numpy 簡介
·2 分鐘
Python Python Basics Numpy Data