pandas.DataFrame()
建構函數的 columns
參數
行為會根據輸入資料類型的不同而有所區別:
當輸入是 NumPy 陣列或列表時
# 使用陣列創建 DataFrame
arr = np.array([1, 2, 3, 4])
df = pd.DataFrame(arr, columns=['值'])
- 陣列/列表本身沒有欄位名稱資訊
columns
參數指定新的欄位名稱- 若不提供
columns
,pandas 會自動使用數字索引 (0, 1, 2…)
當輸入是字典時
# 使用字典創建 DataFrame
data_dict = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data_dict, columns=['B', 'A']) # 重新排序欄位
- 字典的鍵已經包含欄位名稱資訊
columns
參數用於選擇和重排字典中的鍵- 可以只選擇部分鍵,也可以包含字典中不存在的鍵(會填充 NaN)
關鍵區別
- 陣列/列表:
columns
是賦值動作 – 為無名稱的數據指定欄位名稱 - 字典:
columns
是選擇動作 – 從現有鍵中挑選或重新排序,
若誤以為是賦值動作,將會造成缺失值或空DataFrame
行為說明
- 當 columns 完全不匹配時:
- 如果沒有提供索引,DataFrame 將是空的 (0 row)
- column name正確創建,但沒有數據行
- 當 columns 部分匹配時:
- 匹配的列將有數據
- 不匹配的列將填充 NaN
- 行數由原始數據決定
- 當使用額外的 index 參數時:
- 即使列不匹配,也會創建指定數量的行
- 這些行將填充 NaN
示例代碼驗證
import pandas as pd
data_dict = {'A': [1, 2, 3], 'B': [4, 5, 6]}
# 情況1: columns 完全不匹配,沒有提供索引
df1 = pd.DataFrame(data_dict, columns=['C', 'D'])
print("情況1 - 完全不匹配:")
print(df1)
print("shape:", df1.shape)
print()
# 情況2: columns 部分匹配
df2 = pd.DataFrame(data_dict, columns=['A', 'C'])
print("情況2 - 部分匹配:")
print(df2)
print("shape:", df2.shape)
print()
# 情況3: columns 完全不匹配但提供了索引
df3 = pd.DataFrame(data_dict, columns=['C', 'D'], index=[0, 1, 2])
print("情況3 - 不匹配但有索引:")
print(df3)
print("shape:", df3.shape)
輸出:
正確的解決方案
如果您想創建一個有
‘C’和’D’欄位的DataFrame,
並保留原始數據,
您可以先建立好DataFrame,
再賦值給df.columns:
使用建議
- 對於預處理好的模型輸出(如
ypredict
: numpy.array),
使用columns
參數指定有意義的欄位名稱 - 對於已有欄位信息的資料結構,
使用columns
參數選擇需要的欄位
這兩種用法在 pandas 中都被廣泛使用,
理解這個區別有助於更有效地操作資料框架。
推薦hahow線上學習python: https://igrape.net/30afN