减少专用于pandas dtype = object的内存

时间:2017-04-30 22:06:17

标签: python pandas object memory

是否可以在Python pandas中为对象数据类型设置自定义长度? 例如,在我的测试数据框中,一个dtyp = object的列增加了它的大小~60%。虽然这一栏中的数值只是" Y"或" N"。

"传递memory_usage =' deep'将启用更准确的内存使用情况报告,该报告可以充分利用所包含的对象"

df.info(memory_usage='deep')

dtypes:datetime64ns,float64(8),int16(2),int8(4),object(1) 内存使用量:14.7 MB

df.info()

dtypes:datetime64ns,float64(8),int16(2),int8(4),object(1) 内存使用情况:9.2+ MB

这看起来非常低效,但我找不到任何选项/数据类型,这可能会减小尺寸。 (例如,像int8而不是int64)

1 个答案:

答案 0 :(得分:6)

处理这种情况的最佳方法是使用Categoricals。它将使用int8来存储值。

df = pd.DataFrame({'A': np.random.choice(['Y', 'N'], size=10**6)})
df.info(memory_usage='deep')
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000000 entries, 0 to 999999
Data columns (total 1 columns):
A    1000000 non-null object
dtypes: object(1)
memory usage: 62.9 MB
df['A'] = df['A'].astype('category')
df.info(memory_usage='deep')
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000000 entries, 0 to 999999
Data columns (total 1 columns):
A    1000000 non-null category
dtypes: category(1)
memory usage: 976.8 KB