攝影或3C

Python: pandas.DataFrame() 在不同資料類型(array/dict)下的 columns 參數用法

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)

關鍵區別

  1. 陣列/列表columns賦值動作 – 為無名稱的數據指定欄位名稱
  2. 字典columns選擇動作 – 從現有鍵中挑選或重新排序,
    若誤以為是賦值動作,將會造成缺失值或空DataFrame

行為說明

  1. 當 columns 完全不匹配時
    • 如果沒有提供索引,DataFrame 將是空的 (0 row)
    • column name正確創建,但沒有數據行
  2. 當 columns 部分匹配時
    • 匹配的列將有數據
    • 不匹配的列將填充 NaN
    • 行數由原始數據決定
  3. 當使用額外的 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

儲蓄保險王

儲蓄險是板主最喜愛的儲蓄工具,最喜愛的投資理財工具則是ETF,最喜愛的省錢工具則是信用卡

Share
Published by
儲蓄保險王