Я хочу применить масштабирование (используя StandardScaler() из sklearn.preprocessing) в фреймворк pandas. Следующий код возвращает массив numpy, поэтому я теряю все имена столбцов и индексы. Это не то, что я хочу.
features = df[["col1", "col2", "col3", "col4"]]
autoscaler = StandardScaler()
features = autoscaler.fit_transform(features)
"Решение", которое я нашел в Интернете, это:
features = features.apply(lambda x: autoscaler.fit_transform(x))
Кажется, что он работает, но приводит к устаревшему предупреждению:
/usr/lib/python3.5/site-packages/sklearn/preprocessing/data.py:583: Устаревшее предупреждение: передача 1-го массива в качестве устаревших данных в 0.17 и повысит ValueError в 0.19. Измените данные, используя X.reshape(-1, 1), если ваши данные имеют одну функцию или X.resape(1, -1) если он содержит один образец.
Поэтому я попытался:
features = features.apply(lambda x: autoscaler.fit_transform(x.reshape(-1, 1)))
Но это дает:
Traceback (последний последний вызов): Файл "./analyse.py", строка 91, в features = features.apply(lambda x: autoscaler.fit_transform (x.reshape(-1, 1))) Файл "/usr/lib/python3.5/site-packages/ pandas/core/frame.py" , строка 3972, в подать выражение return self._apply_standard (f, axis, reduce = reduce) Файл "/usr/lib/python3.5/site-packages/pandas/core/frame.py" , строка 4081, в _apply_standard result = self._constructor (data = results, index = index) Файл "/usr/lib/python3.5/site-packages/pandas/core/frame.py" , строка 226, в INIT mgr = self._init_dict (данные, индекс, столбцы, dtype = dtype) Файл "/usr/lib/python3.5/site-packages/ pandas/core/frame.py" , строка 363, в _init_dict dtype = dtype) Файл "/usr/lib/python3.5/site-packages/pandas/core/frame.py" , строка 5163, в _arrays_to_mgr массивы = _homogenize (массивы, индекс, dtype) Файл "/usr/lib/python3.5/site-packages/pandas/core/frame.py" , строка 5477, в _homogenize raise_cast_failure = False) Файл "/usr/lib/python3.5/site-packages/pandas/core/series.py", строка 2885, в _sanitize_array raise Exception ( "Данные должны быть одномерными" ) Исключение: данные должны быть одномерными
Как применить масштабирование к фреймворку pandas, оставив нет данных? Без копирования данных, если это возможно.