Pandas DataFrame

DataFrame 是 Pandas 最核心的資料結構,是一個二維的表格,由列(row)和欄(column)組成。你可以把它想像成 Excel 試算表或資料庫的表格。

建立 DataFrame

從 dict 建立

最常見的方式是用 dictionary,每個 key 是欄位名稱,value 是該欄位的資料:

import pandas as pd

data = {
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [25, 30, 35],
    'city': ['Taipei', 'Tokyo', 'Seoul']
}

df = pd.DataFrame(data)
print(df)

輸出:

      name  age    city
0    Alice   25  Taipei
1      Bob   30   Tokyo
2  Charlie   35   Seoul

從 list of dicts 建立

每個 dict 代表一列資料:

data = [
    {'name': 'Alice', 'age': 25, 'city': 'Taipei'},
    {'name': 'Bob', 'age': 30, 'city': 'Tokyo'},
    {'name': 'Charlie', 'age': 35, 'city': 'Seoul'}
]

df = pd.DataFrame(data)
print(df)

從二維 list 建立

data = [
    ['Alice', 25, 'Taipei'],
    ['Bob', 30, 'Tokyo'],
    ['Charlie', 35, 'Seoul']
]

df = pd.DataFrame(data, columns=['name', 'age', 'city'])
print(df)

自訂索引

df = pd.DataFrame(data, columns=['name', 'age', 'city'], index=['a', 'b', 'c'])
print(df)

輸出:

      name  age    city
a    Alice   25  Taipei
b      Bob   30   Tokyo
c  Charlie   35   Seoul

DataFrame 基本屬性

data = {
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [25, 30, 35],
    'city': ['Taipei', 'Tokyo', 'Seoul']
}
df = pd.DataFrame(data)

print(df.shape)      # (3, 3) - 3 列 3 欄
print(df.columns)    # Index(['name', 'age', 'city'], dtype='object')
print(df.index)      # RangeIndex(start=0, stop=3, step=1)
print(df.dtypes)     # 各欄位的資料型別
print(len(df))       # 3(列數)

選取欄位

# 選取單一欄位,回傳 Series
print(df['name'])

# 選取多個欄位,回傳 DataFrame
print(df[['name', 'age']])

選取列

# 用 loc 以索引標籤選取
print(df.loc[0])           # 第一列
print(df.loc[0:1])         # 第 0 到 1 列

# 用 iloc 以位置選取
print(df.iloc[0])          # 第一列
print(df.iloc[0:2])        # 前兩列

選取特定儲存格

# loc[列, 欄]
print(df.loc[0, 'name'])     # Alice

# iloc[列位置, 欄位置]
print(df.iloc[0, 0])         # Alice

新增欄位

# 新增固定值欄位
df['country'] = 'Asia'

# 新增計算欄位
df['age_plus_10'] = df['age'] + 10

print(df)

刪除欄位

# 刪除欄位
df = df.drop('age_plus_10', axis=1)

# 或使用 del
del df['country']

刪除列

# 刪除特定索引的列
df = df.drop(0)  # 刪除索引為 0 的列

條件過濾

# 篩選 age > 25 的資料
result = df[df['age'] > 25]
print(result)

輸出:

      name  age   city
1      Bob   30  Tokyo
2  Charlie   35  Seoul

修改資料

# 修改單一值
df.loc[0, 'age'] = 26

# 修改整個欄位
df['age'] = df['age'] + 1

DataFrame vs dict

特性DataFramedict
結構二維表格key-value
選取支援欄位、列、條件篩選只能用 key 存取
運算支援向量化運算需要迴圈
統計內建統計方法需要自己計算
檔案讀寫直接讀寫 CSV、Excel 等需要轉換

DataFrame 是 Pandas 的核心,後續的教學都會圍繞著 DataFrame 的操作展開。