HOWTO · Pandas
從列表中建立 Pandas DataFrame
本教程演示瞭如何使用列表建立 Pandas DataFrame。
本頁內容
使用 Pandas 的 pd.DataFrame() 建構子,可將以清單為基礎的資料轉換為表格。請依資料形狀選擇輸入方式:一維清單會建立單一欄位,清單的清單會建立多列,而字典則可提供具名欄位或記錄。下方範例示範如何指定欄名,以及各種資料形狀如何對應至產生的 DataFrame。所有範例中的欄名都維持英文,程式碼與輸出不作翻譯。
使用單一清單建立 DataFrame
將一維清單傳給 pd.DataFrame(),並指定一個欄名。清單中的每個值都會成為該欄的一列。
import pandas as pd
values = [10, 20, 30]
df = pd.DataFrame(values, columns=["Score"])
print(df)
即使輸入只有一個欄位,columns 引數仍須使用標籤清單。除非指定其他索引,否則 DataFrame 會使用預設列索引。依照這些輸入,結果會有一個 Score 欄位,並為每個值建立一列;此欄名在範例中維持英文。
使用多個清單建立 DataFrame
若不同清單分別包含各欄位中彼此對應的值,可使用 Python 的 zip() 函式依位置配對項目,再將產生的各列傳給建構子。
import pandas as pd
names = ["Ada", "Lin"]
scores = [95, 88]
rows = list(zip(names, scores))
df = pd.DataFrame(rows, columns=["Name", "Score"])
print(df)
兩個清單中的第一個值會組成第一列,第二個值會組成下一列,依此類推。zip() 遇到最短的輸入時就會停止,因此較長清單末尾多出的值不會納入結果。若需要保留每個值,請讓清單長度相符。
使用清單的清單建立 DataFrame
若資料以列為單位整理,請讓每個內層清單代表一列,並將相應的欄名傳給 pd.DataFrame()。
import pandas as pd
rows = [[1, "Ada", 95], [2, "Lin", 88]]
df = pd.DataFrame(rows, columns=["ID", "Name", "Score"])
print(df)
在此範例中,每個內層清單的第一個項目對應 ID,第二個對應 Name,第三個對應 Score。每列都應為指定的每個欄名提供一個值;準備巢狀清單時,請維持這項對應關係。若資料已整理成記錄,但各值尚未附上欄位名稱,這種格式就很實用。範例中的欄名維持英文。
使用字典清單建立 DataFrame
若每筆記錄都已將值與欄位名稱配對,請使用字典清單。Pandas 會將字典的鍵作為欄名,並將每個字典作為一列。
import pandas as pd
records = [
{"Name": "Ada", "Score": 95},
{"Name": "Lin", "Score": 88},
]
df = pd.DataFrame(records)
print(df)
這種資料形狀適合記錄型資料,因為值是透過鍵識別,而非依位置判定。若某個字典缺少其他記錄中有的鍵,Pandas 仍會建立該欄,並在該列的缺漏位置填入缺失值標記。若要控制欄位順序或納入一組已知欄位,可在建構子中加入 columns=[...]。範例中顯示的欄名維持英文。
使用清單字典建立 DataFrame
若資料以欄為單位整理,請將每個欄名對應到一份值清單。字典的鍵會成為欄名,而每份清單則提供該欄的值。此範例中的欄名維持英文。
import pandas as pd
columns = {
"Name": ["Ada", "Lin"],
"Score": [95, 88],
}
df = pd.DataFrame(columns)
print(df)
字典中的所有清單都必須具有相同長度,Pandas 才能將它們組成各列。若資料是按欄位收集,例如一份姓名清單和另一份分數清單,這種結構就很實用。若資料目前是按列整理,請改用上方的清單的清單方式。
使用 NumPy 陣列建立 DataFrame
二維 NumPy 陣列可以像巢狀清單一樣傳給 pd.DataFrame()。若陣列的欄位需要具描述性的名稱,請提供欄名。
import numpy as np
import pandas as pd
values = np.array([[1, 95], [2, 88]])
df = pd.DataFrame(values, columns=["ID", "Score"])
print(df)
NumPy 陣列具有套用至其元素的 dtype。例如,使用數字和字串混合建立單一陣列時,數值可能會在建立 DataFrame 前被轉換成字串。若不同欄位需要不同型別,可將它們建立為字典中的個別值,或使用字典清單。此範例使用數值陣列,並未提出效能方面的主張;請選擇最能呈現現有資料的輸入形狀。