为何pd.get_dummies返回布尔值而非0/1二进制值?
解决pd.get_dummies返回布尔值而非0/1的问题
问题原因
当传入的原始目标列本身是布尔类型时,pd.get_dummies会默认保留布尔 dtype,生成的独热编码列自然显示为True/False;另外部分旧版本的pandas也可能存在这种默认行为。
解决办法
1. 提前转换原始列类型
把布尔类型的列转成字符串或整数类型后再做独热编码:
# 转成字符串 df['column_a'] = df['column_a'].astype(str) df['column_b'] = df['column_b'].astype(str) df['column_c'] = df['column_c'].astype(str) df = pd.get_dummies(df, columns=['column_a', 'column_b', 'column_c']) # 或者直接转成整数(布尔转int会自动把True转1,False转0) df[['column_a', 'column_b', 'column_c']] = df[['column_a', 'column_b', 'column_c']].astype(int) df = pd.get_dummies(df, columns=['column_a', 'column_b', 'column_c'])
2. 调用pd.get_dummies时指定dtype参数
在函数中直接指定输出类型为int,无论原始列是什么类型,输出都会是0/1:
df = pd.get_dummies(df, columns=['column_a', 'column_b', 'column_c'], dtype=int)
注意:这个参数在pandas 1.5.0及以上版本支持,如果你用的是旧版本,建议升级pandas到稳定版。
3. 生成后批量转换类型
如果已经生成了布尔类型的独热列,直接对整个DataFrame做类型转换:
df = pd.get_dummies(df, columns=['column_a', 'column_b', 'column_c']).astype(int)
内容的提问来源于stack exchange,提问作者shasilon
相关产品推荐
相关产品推荐

