pandas删除uint8类型哑变量报['False'] not found in axis错误
报错根因
两个写法错误直接触发报错:
- 列名类型错配:
pd.get_dummies()生成的二分类哑变量列名是布尔值True/False,不是字符串类型的'True'/'False'。你之前重命名时传的键是字符串"True",完全匹配不到布尔类型的列名,重命名操作根本没生效,后续传字符串'False'删列自然找不到目标列。 inplace参数用法错误:所有设置inplace=True的pandas方法都是直接修改原数据、返回None,你写data2 = data2.drop(['False'], axis=1, inplace=True)会把data2赋值为空值None,就算列名写对了,后续操作data2也会触发属性错误。
修正方案
你可以直接用get_dummies的原生参数简化流程,不需要手动拼接再删原列:
# 一步完成哑变量生成、合并原表、删除原分类列 data2 = pd.get_dummies(data, columns=['High_or_Low_Balance']) # 重命名时注意键是布尔值,不要加引号 data2.rename(columns={True: "High_Bank_Balance", False: "Low_Bank_Balance"}, inplace=True) # 删除低余额对应列时传布尔值False,不要加引号,inplace操作不要赋值给变量 data2.drop([False], axis=1, inplace=True)
如果要保留你原来的分步写法,修正后代码如下:
dummy = pd.get_dummies(data['High_or_Low_Balance']) data2 = pd.concat((data, dummy), axis=1) data2 = data2.drop(['High_or_Low_Balance'], axis=1) # 修正rename的键类型为布尔值 data2.rename(columns={True:"High_Bank_Balance"}, inplace=True) # 修正drop的列名类型,去掉赋值 data2.drop([False], axis=1, inplace=True)
排查验证
如果不确定列名类型,可以在生成哑变量后运行下面的代码确认:
print(dummy.columns) print(dummy.columns.dtype)
输出会显示列类型为bool,自然匹配不到你传入的字符串类型列名。
内容的提问来源于stack exchange,提问作者And10
相关产品推荐
相关产品推荐

