训练和测试集上的虚拟变量导致不同大小的数据帧输出

我正在使用 onehot 编码我的数据帧(训练和测试)pd.get_dummies()。然而,两个数据框都相当大,我注意到它输出不同的列大小。271 vs 290。这是由于某些定性变量在一个数据帧中有值,而在另一个数据帧中没有值。

是否有一个命令可以使用来pd.get_dummies确保当这些变量存在于其他数据帧中时我得到一个带有 0 的空列?


眼眸繁星
浏览 124回答 2
2回答

Smart猫小萌

当您拥有数据框并希望将对象转换为虚拟变量时,请在使用之前不要将其拆分 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)

一只名叫tom的猫

如果可能的话,最安全的选择是在使用 之前将列转换为包含所有可能值的分类数据类型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  c0  1  0  01  0  1  02  0  0  1    知道“d”、“e”的虚拟人存在,即使当前数据中没有表示:df["x"] = df["x"].astype(x_cat)x_dummies = pd.get_dummies(df.x)   a  b  c  d  e0  1  0  0  0  01  0  1  0  0  02  0  0  1  0  0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python