2017-04-30 13 views
0

是否可以在Python熊貓中設置對象數據類型的自定義長度? 例如,在我的測試數據框中,dtyp = object的一列增加了它的大小〜60%。儘管此列中的值只是「Y」或「N」。減少專用於熊貓的內存dtype = object

「傳遞memory_usage = '深' 將使更精確的內存使用情況報告,即佔包含的對象的完全使用」

df.info(memory_usage='deep') 

dtypes:datetime64ns,float64(8),INT16 (2),INT8(4),目的(1) 內存使用情況:14.7 MB

df.info() 

dtypes:datetime64ns,float64(8),INT16(2),INT8(4),目的(1 ) 內存使用:9.2+ MB

這看起來非常低效的記憶,但我找不到任何選項/數據類型,它可以減少大小。 (例如,像int8而不是int64)

回答

3

最好的處理方法是使用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 
+0

謝謝,它解決了一切。只是有一些困惑,'category'在read_csv中不被支持,但這是由於我的語法不好。 –

+0

@GrinvydasKareiva歡迎您。對於read_csv,我認爲對分類的支持從版本0.19開始。還要確保你有最新版本。 – ayhan