执行pd.get_dummies时出现Columns must be same length as key错误求助
pandas独热编码触发“Columns must be same length as key”报错解决方案
报错根源
pd.get_dummies()处理单列时,若该列唯一取值数量≥3,即使设置drop_first=True,返回结果依然是多列DataFrame,你直接将多列结果赋值给原DataFrame的单个列df[col],列数量不匹配就会触发该报错。
比如Dependents列如果有0、1、2、3+四个取值,编码后删除第一列还剩3列,无法直接存入原单列的位置。
修复方案
- 方案1:保留二分类列原列名,多分类列编码后合并
cols = ["Gender", "Married", "Education", "Self_Employed", "Property_Area", "Loan_Status", "Dependents"] # 处理二分类列,编码后仍为单列,可直接赋值给原列 for col in cols: if df[col].nunique() == 2: df[col] = pd.get_dummies(df[col], drop_first=True) else: # 多分类列编码后合并到原表,删除原列 dummies = pd.get_dummies(df[col], prefix=col, drop_first=True) df = pd.concat([df.drop(col, axis=1), dummies], axis=1)
- 方案2:批量编码所有目标列,无需循环
如果不需要保留原多分类列的列名,可一次性完成编码合并:
cols = ["Gender", "Married", "Education", "Self_Employed", "Property_Area", "Loan_Status", "Dependents"] df = pd.concat([ df.drop(cols, axis=1), pd.get_dummies(df[cols], drop_first=True) ], axis=1)
内容的提问来源于stack exchange,提问作者Avishek Mandal
相关产品推荐
相关产品推荐

