pd.get_dummies()默认输出布尔值而非0/1的原因及相关疑问
Pandas get_dummies 布尔值/0-1输出问题解答
问题背景
先将DataFrame的分类列转为category类型后,调用pd.get_dummies(df, columns=categorical_cols),实际输出为True/False布尔值,而非预期的0/1二进制值;添加dtype=int参数可转为0/1。针对这个场景,解答以下三个疑问:
1. 为何pd.get_dummies()默认输出布尔值而非0/1?
当输入列是category类型时,Pandas默认用布尔类型输出是出于内存优化的考虑:布尔值在内存中仅占1字节,比常规int类型(通常4字节)更节省空间。同时从语义上看,True/False直接对应“是否属于该分类”,逻辑表达更直观。Pandas针对category类型的输入做了专门的存储优化,所以默认输出布尔值。
2. 是Pandas新版本更新导致还是操作有误?
这是Pandas版本更新带来的行为变化,大概在1.5.0版本左右调整了这个默认逻辑:早期版本中get_dummies不管输入列类型,默认输出int类型的0/1;后续版本为了优化内存,针对category类型的输入默认输出布尔值。你的操作本身没有错误,只是新旧版本的行为差异导致预期不符。
3. 是否应始终使用dtype=int?
不需要始终添加dtype=int,按需选择即可:
- 如果后续要做数值计算或机器学习建模(部分模型对布尔类型的支持不佳),建议添加
dtype=int确保输出0/1数值; - 如果只是做数据筛选、统计分析或可视化,布尔类型足够用且更省内存,没必要强制转换。
内容的提问来源于stack exchange,提问作者Mr Jxtr
相关产品推荐
相关产品推荐

