Эффективный для памяти способ хранения значений bool и NaN в пандах

1

Я работаю с довольно большим набором данных (более 4 ГБ), который я импортировал в pandas. Достаточно некоторые столбцы в этом наборе данных - это простые индикаторы True/False, и, естественно, наиболее экономичный способ их хранения будет использовать bool dtype для этого столбца. Однако в столбце также содержатся некоторые значения NaN, которые я хочу сохранить. Прямо сейчас это приводит к тому, что столбец имеет dtype float (со значениями 1.0, 0.0 и np.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>

Теги:
pandas
python-3.x
memory
nan

1 ответ

7
Лучший ответ

Использовать dtype: int8

1 = True
0 = False
-1 = NaN

Это в 4 раза лучше, чем float32 и в 8 раз лучше, чем float64

Ещё вопросы

Сообщество Overcoder
Наверх
Меню