Pandas稀疏值列数学运算报错问题求助
Pandas稀疏虚拟变量列相加报错的原生解决方案
当使用pd.get_dummies生成稀疏虚拟变量矩阵后,执行列与列的加法运算会触发module 'pandas._libs.sparse' has no attribute 'sparse_add_uint8'错误——这是因为Pandas对uint8类型的稀疏数组未实现列间加法的底层操作,但标量运算(如列加1)不受影响。以下是几种Pandas原生的解决办法:
方法1:使用SparseArray的原生sparse.add方法
直接调用稀疏列的sparse.add方法完成列间相加,这是最贴合原生稀疏数组设计的方案:
# 直接执行稀疏列相加 result = animals['cat'].sparse.add(animals['dog']) # 若需要转为DataFrame列 animals['cat_dog'] = result
方法2:转换稀疏列的数据类型
报错源于uint8类型的稀疏加法未实现,将列转换为Pandas支持加法操作的稀疏 dtype(如Sparse[int]或Sparse[float])即可解决:
# 转换为int类型的稀疏数组 animals['cat'] = animals['cat'].astype('Sparse[int]') animals['dog'] = animals['dog'].astype('Sparse[int]') # 此时可正常执行加法 animals['cat'] + animals['dog']
方法3:提前合并类别生成虚拟变量
如果你的需求是将多个类别合并为一个新的虚拟变量(比如把猫和狗归为同一类),可以在生成虚拟变量前直接处理原数据列,避免后续的列间运算:
# 合并cat和dog为同一类别 testframe['animal_combined'] = testframe['animal'].map(lambda x: 'cat_dog' if x in ['cat', 'dog'] else x) # 直接生成合并后的稀疏虚拟变量 combined_dummies = pd.get_dummies(testframe['animal_combined'], sparse=True)
内容的提问来源于stack exchange,提问作者permanently_confused
相关产品推荐
相关产品推荐

