为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

眼眸繁星 2023-07-05 10:17:45
我正在使用 onehot 编码我的数据帧(训练和测试)pd.get_dummies()。然而,两个数据框都相当大,我注意到它输出不同的列大小。271 vs 290。这是由于某些定性变量在一个数据帧中有值,而在另一个数据帧中没有值。是否有一个命令可以使用来pd.get_dummies确保当这些变量存在于其他数据帧中时我得到一个带有 0 的空列?
查看完整描述

2 回答

?
Smart猫小萌

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)


查看完整回答
反对 回复 2023-07-05
?
一只名叫tom的猫

TA贡献1906条经验 获得超2个赞

如果可能的话,最安全的选择是在使用 之前将列转换为包含所有可能值的分类数据类型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


查看完整回答
反对 回复 2023-07-05
  • 2 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信