#python #pandas #numpy #dataframe
#python #панды #numpy #фрейм данных
Вопрос:
Я хочу использовать StandardScaler в моем фрейме данных. В настоящее время объем df составляет 303 МБ. После применения StandardScaler фрейм данных превратился в массив numpy размером 2529 МБ. Как это возможно? Как мне решить эту проблему?
Я просто преобразовал его здесь вручную и не использовал StandardScaler, но результат тот же. Вычисления намного дольше с таким огромным набором данных. Как я могу решить эту проблему?
X.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 150930 entries, 0 to 150929
Columns: 2095 entries, len_description to winery_àMaurice
dtypes: int32(1), int64(1), uint8(2093)
memory usage: 303.0 MB
np.array(X.values).nbytes/1e6
2529.5868
Комментарии:
1. Объем памяти вашего массива примерно в 8 раз больше, чем у фрейма данных. Большая часть ваших данных в фрейме данных имеет dtype unit8. Я предполагаю, что ваш массив numpy имеет dtype float64 (или int64) … следовательно, увеличение памяти в 8 раз.
2. да, это правильно!
3. Так что, одним словом, вы не можете решить эту проблему. Вы можете преобразовать данные в формат float32 или float16.
4. @Phil, зависит от ваших данных.. Почему бы вам сначала не попробовать преобразовать типы в Pandas, т.Е.
X.apply(pd.to_numeric, downcast='integer').values.nbytes/1e6
. Если Pandas не может понизиться доint8
, это указывает на то, что у вас где — то есть ценности, которые нельзя сохранитьint8
.5. @phil в зависимости от имеющихся у вас данных. Для больших чисел это определенно произойдет. Обратите внимание, что
uint8
можно хранить значения в диапазоне от -128 до 127