python - 在 pandas 中存储 bool 和 NaN 值的内存有效方法

标签 python python-3.x pandas memory nan

我正在处理相当大的数据集(超过 4 GB),我在 pandas 中导入了它.这个数据集中有相当多的列是简单的 True/False 指示符,自然地,存储这些列的最节省内存的方法是使用 bool。此列的数据类型。但是,该列还包含一些我想保留的 NaN 值。现在,这导致该列具有 dtype float(值为 1.00.0np.nan)或对象,但它们都使用太多内存。

举个例子:

df = pd.DataFrame([[True,True,True],[False,False,False], 
                   [np.nan,np.nan,np.nan]])
df[1] = df[1].astype(bool)
df[2] = df[2].astype(float)
print(df)
print(df.memory_usage(index=False, deep=True))
print(df.memory_usage(index=False, deep=False))

结果

       0      1    2
0   True   True  1.0
1  False  False  0.0
2    NaN   True  NaN

0       100
1         3
2        24
dtype: int64

0        24
1         3
2        24
dtype: int64

存储这些值的最有效方法是什么,因为它们只能采用 3 种不同的值:True , False<undefined>

最佳答案

使用数据类型:int8

1 = True
0 = False
-1 = NaN

这比 float32 好 4 倍,比 float64 好 8 倍

关于python - 在 pandas 中存储 bool 和 NaN 值的内存有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50877663/

相关文章:

python - 授权 python 脚本在没有 OAuth2 用户流程的情况下访问 GData API

python - 如何在 cmd 以外的地方运行 Python 脚本?

python - Django 登录 - 缺少 1 个必需的位置参数

python - 检查返回值是否为 None

python - 将 pandas 时间戳与日期时间进行比较

python - python中网络节点之间的无服务器通信

没有重复的Python random.choice方法?

python - 使用 PIL 和请求下载图像

python - 检查系列中的值是否出现在 df 列中的任何位置,且始终计算为 True

python - FuzzyWuzzy - 循环列表,匹配接受的值,并返回数据帧