You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

对Pandas稀疏布尔类型取反,如何保持填充值为False?

稀疏布尔DataFrame取反格式问题及解决

问题描述

我有如下形式的稀疏DataFrame:

df = [[True, False , False],
      [False, False, True],
      [False, True, False]]

每列的数据类型为Sparse[bool, False]。需要对其进行取反操作(True→False,False→True),同时保持每列的数据类型仍为Sparse[bool, False]。但使用~运算符取反后,值虽反转,但数据类型变为Sparse[bool, True],求解决方法。

更新说明:尝试将两个矩阵拼接后,发现得到的稀疏矩阵内存占用与密集矩阵相同,因此没必要全程保持稀疏格式。

解决方案

保持稀疏格式的处理方法

如果一定要维持Sparse[bool, False]的格式,可以手动重新构造稀疏数组:

import pandas as pd

# 对原DataFrame逐列处理,重新指定填充值为False
df_result = df.apply(
    lambda col: pd.arrays.SparseArray(
        ~col.to_numpy(),  # 取反原数组的值
        fill_value=False  # 设置新的填充值为False
    )
)

原理:原稀疏数组以False为填充值,存储的是True的位置;取反后我们需要以False为填充值,存储原False位置的取反结果(即True),通过重新指定fill_value并传入取反后的数组,就能得到符合要求的稀疏格式。

放弃稀疏格式的简化处理

根据更新说明,稀疏矩阵内存优势已不存在,直接转为密集矩阵处理更高效:

# 转换为密集布尔矩阵
df_dense = df.sparse.to_dense()
# 直接取反
df_inverted = ~df_dense

后续操作直接基于密集矩阵即可,无需再维护稀疏格式。


内容的提问来源于stack exchange,提问作者bachts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 18:07:19