Pandas 選取列
選取 DataFrame 的列(row)是資料分析中的基本操作。Pandas 提供了多種選取列的方式。
範例資料
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'age': [25, 30, 35, 28, 32],
'city': ['Taipei', 'Tokyo', 'Seoul', 'Taipei', 'Tokyo']
}, index=['a', 'b', 'c', 'd', 'e'])
loc:用索引標籤選取
loc 使用索引標籤(index label)來選取資料。
選取單一列
# 回傳 Series
row = df.loc['a']
print(row)
輸出:
name Alice
age 25
city Taipei
Name: a, dtype: object
選取多列
# 回傳 DataFrame
result = df.loc[['a', 'c', 'e']]
print(result)
選取範圍(包含終點)
# 從 a 到 c(包含 c)
result = df.loc['a':'c']
print(result)
輸出:
name age city
a Alice 25 Taipei
b Bob 30 Tokyo
c Charlie 35 Seoul
同時選取列和欄
# 特定列、特定欄
result = df.loc['a', 'name'] # 'Alice'
# 特定列、多欄
result = df.loc['a', ['name', 'age']]
# 多列、多欄
result = df.loc[['a', 'b'], ['name', 'age']]
# 範圍選取
result = df.loc['a':'c', 'name':'city']
iloc:用位置選取
iloc 使用整數位置(integer position)來選取資料,從 0 開始。
選取單一列
# 第一列
row = df.iloc[0]
# 最後一列
row = df.iloc[-1]
選取多列
# 第 0、2、4 列
result = df.iloc[[0, 2, 4]]
選取範圍(不包含終點)
# 前三列(0, 1, 2)
result = df.iloc[0:3]
# 最後兩列
result = df.iloc[-2:]
同時選取列和欄
# [列位置, 欄位置]
result = df.iloc[0, 0] # 'Alice'
# 多列多欄
result = df.iloc[0:3, 0:2]
# 特定位置
result = df.iloc[[0, 2], [0, 1]]
loc vs iloc 比較
| 特性 | loc | iloc |
|---|---|---|
| 選取方式 | 索引標籤 | 整數位置 |
| 範圍終點 | 包含 | 不包含 |
| 適用情境 | 有意義的索引標籤 | 只需要位置 |
# 假設索引是 ['a', 'b', 'c', 'd', 'e']
# loc 包含終點
df.loc['a':'c'] # 包含 a, b, c
# iloc 不包含終點
df.iloc[0:3] # 包含 0, 1, 2(不含 3)
用中括號選取
簡單的切片可以直接用中括號:
# 前三列(等同 iloc[0:3])
result = df[0:3]
# 也可以用索引標籤範圍
result = df['a':'c']
但這種方式只適用於切片,建議還是使用 loc 或 iloc 比較明確。
選取第一列和最後一列
# 第一列
first = df.iloc[0]
first = df.head(1)
# 最後一列
last = df.iloc[-1]
last = df.tail(1)
隨機選取列
# 隨機選取 2 列
sample = df.sample(n=2)
# 隨機選取 50% 的列
sample = df.sample(frac=0.5)
# 設定隨機種子(可重現結果)
sample = df.sample(n=2, random_state=42)
根據位置選取特定列
# 選取偶數列
even_rows = df.iloc[::2]
# 選取奇數列
odd_rows = df.iloc[1::2]
# 每隔 n 列選取
every_third = df.iloc[::3]