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 比較

特性lociloc
選取方式索引標籤整數位置
範圍終點包含不包含
適用情境有意義的索引標籤只需要位置
# 假設索引是 ['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']

但這種方式只適用於切片,建議還是使用 lociloc 比較明確。

選取第一列和最後一列

# 第一列
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]