首页 > 解决方案 > 在 pandas 中存储 bool 和 NaN 值的内存有效方法

问题描述

我正在处理一个相当大的数据集(超过 4 GB),我在pandas. 这个数据集中的很多列是简单的真/假指标,自然而然地,最节省内存的存储这些列的方法bool是为此列使用 dtype。但是,该列还包含一些我想保留的 NaN 值。现在,这导致列具有 dtype 浮点数(带有值1.0和)或对象0.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 种不同的值TrueFalse<undefined>

标签: pythonpython-3.xpandasmemorynan

解决方案


使用数据类型:int8

1 = True
0 = False
-1 = NaN

这比好 4 倍,比好float328 倍float64


推荐阅读