我有一個CSV數據集,其中包含40個用於處理大熊貓的功能。 7個功能是連續的(int32
),其餘都是分類的。何時使用Category而不是Object?
我的問題是:
我應該用熊貓的dtype('category')
的類別特徵,或者我可以讓默認dtype('object')
?
我有一個CSV數據集,其中包含40個用於處理大熊貓的功能。 7個功能是連續的(int32
),其餘都是分類的。何時使用Category而不是Object?
我的問題是:
我應該用熊貓的dtype('category')
的類別特徵,或者我可以讓默認dtype('object')
?
如果您希望利用很多重複,請使用一個類別。
例如,假設我想要一個大型交易表的每個交易所的總規模。使用默認object
是完全合理的:
In [6]: %timeit trades.groupby('exch')['size'].sum()
1000 loops, best of 3: 1.25 ms per loop
但由於可能交換的名單是非常小的,因爲有大量的重複,我能做出這樣快使用category
:
In [7]: trades['exch'] = trades['exch'].astype('category')
In [8]: %timeit trades.groupby('exch')['size'].sum()
1000 loops, best of 3: 702 µs per loop
請注意,類別確實是動態枚舉的形式。如果可能值的範圍是固定且有限的,則它們是最有用的。
謝謝你的回答! 所以分類類型更適合內存優化 – user4640449
使用Categoricals的另一個原因是它們可以提供(因爲它不是默認的),對你的類別提供*排序*例如可能['small','medium ','large']。然後你可以按這個排序!查看文檔[here](http://pandas.pydata.org/pandas-docs/stable/categorical.html#sorting-and-order) – Jeff
沒有理由不在這裏使用一個類別。如果字符串很長,也會節省大量的空間/內存(你可以用'info()'或'memory_usage()'來檢查,而且dtype中的't'也不會被大寫。 – JohnE