在pandas

时间:2018-06-15 14:32:04

标签: python python-3.x pandas memory nan

我正在使用相当大的数据集(超过4 GB),我在pandas中导入了该数据集。此数据集中的相当一些列是简单的True / False指标,当然,存储这些列的内存效率最高的方法是使用此列的bool dtype。但是,该列还包含一些我想要保留的NaN值。现在,这导致列具有dtype float(值为1.00.0np.nan)或object,但它们都使用了太多内存。

举个例子:

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>

1 个答案:

答案 0 :(得分:7)

使用dtype:int8

1 = True
0 = False
-1 = NaN

这比float32好4倍,比float64

好8倍