2 回答

TA貢獻1911條經驗 獲得超7個贊
當您擁有數據框并希望將對象轉換為虛擬變量時,請在使用之前不要將其拆分 get_dummies
df = pd.get_dummies(df)
train = df[cond]
test = df.drop(train.index)
修復您的代碼
df = pd.get_dummies(pd.concat([train , test]))
train = df[df.index.isin(train.index)]
test = df.drop(train.index)

TA貢獻1906條經驗 獲得超3個贊
如果可能的話,最安全的選擇是在使用 之前將列轉換為包含所有可能值的分類數據類型get_dummies。如果您的訓練數據經常更改(流式傳輸/經常更新)并且您想要最大的兼容性,這尤其有用:
x_values = ["a", "b", "c", "d", "e"]
x_type = pd.Categorical(values=x_values)
df = pd.DataFrame(dict(x=["a", "b", "c"], y=[1,2,3]))
不知道可能值“d”、“e”的傻瓜:
x_dummies = pd.get_dummies(df.x)
a b c
0 1 0 0
1 0 1 0
2 0 0 1
知道“d”、“e”的虛擬人存在,即使當前數據中沒有表示:
df["x"] = df["x"].astype(x_cat)
x_dummies = pd.get_dummies(df.x)
a b c d e
0 1 0 0 0 0
1 0 1 0 0 0
2 0 0 1 0 0
添加回答
舉報