HOWTO · Pandas

遍歷 Pandas DataFrame 的列

本教程演示了如何在 Dataframe 的列中進行遍歷。

本頁內容

若要逐一走訪 Pandas DataFrame 的欄位,可以迴圈走訪 DataFrame,取得每個欄標籤,再用 df[column] 選取該欄位的序列。若需要同時取得欄標籤與序列,請使用 DataFrame.items();若還需要欄位的位置,則可使用 enumerate()。

使用 for 迴圈和 df[column] 走訪欄位

走訪 DataFrame 時,迴圈會依序取得欄標籤。每次迴圈執行時,df[column] 會選取該標籤所對應的序列。以下範例會先印出每個欄標籤,再以 Python 清單的形式列出該欄位的值:

import pandas as pd

df = pd.DataFrame(
    {"name": ["Ada", "Lin"], "score": [9, 8]}
)

for column in df:
    print(column, df[column].tolist())
name ['Ada', 'Lin']
score [9, 8]

迴圈變數是 name 或 score 這類欄標籤,不是列號。選取出的序列會保留 DataFrame 的列索引。只有在後續步驟需要清單時,才用 .tolist() 將值轉成清單;.values 則會提供類似陣列的表示形式。

使用 DataFrame.items() 走訪欄標籤與序列

DataFrame.items() 會逐一產生每個欄標籤及其對應序列。將這組配對解包,就能直接處理標籤和值。以下範例會印出每個標籤及其序列中的值:

import pandas as pd

df = pd.DataFrame(
    {"name": ["Ada", "Lin"], "score": [9, 8]}
)

for column_label, series in df.items():
    print(column_label, series.tolist())
name ['Ada', 'Lin']
score [9, 8]

當你需要在同一個迴圈中取得欄標籤及其對應序列時,適合使用這種寫法。例如,可以逐欄套用不同的格式處理或摘要步驟。如果某項計算能一次套用到整個 DataFrame,使用 Pandas 向量化操作可能比逐欄處理更清楚。

使用 enumerate() 取得每個欄位的位置與標籤

將 df.columns 傳入 Python 內建的 enumerate(),即可取得每個欄標籤及其在欄位順序中的零起始位置。以下範例會依序印出每個欄位的零起始位置和標籤:

import pandas as pd

df = pd.DataFrame(
    {"name": ["Ada", "Lin"], "score": [9, 8]}
)

for position, column_label in enumerate(df.columns):
    print(position, column_label)
0 name
1 score

此處第一個欄位的 position 是 0,第二個是 1,依此類推。這個位置不同於列索引標籤;列索引用來識別各列,其值不一定是連續整數。如果其他操作同時需要欄位順序和標籤,請使用這種寫法;若不需要位置,則可使用基本迴圈或 DataFrame.items()。