Я хочу застосувати масштабування (за допомогою 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: DeprecationWarning: Передача 1d-масивів, оскільки дані застаріли в 0.17, а ValueError - в 0.19. Змініть форму ваших даних, використовуючи X.reshape (-1, 1), якщо ваші дані мають одну функцію, або X.reshape (1, -1), якщо вони містять один зразок.
Тому я спробував:
features = features.apply(lambda x: autoscaler.fit_transform(x.reshape(-1, 1)))
Але це дає:
Відстеження (останній останній дзвінок): Файл "./analyse.py", рядок 91, у features = features.apply (лямбда x: autoscaler.fit_transform (x.reshape (-1, 1))) Файл "/ usr / lib / python3.5 / site-package / pandas / core / frame.py ", рядок 3972, у застосуванні return self._apply_standard (f, ось, зменшення = зменшення) Файл" /usr/lib/python3.5/site- package / pandas / core / frame.py ", рядок 4081, у _apply_standard result = self._constructor (дані = результати, індекс = індекс) Файл" /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 arrays = _homogenize (масиви, індекс, dtype) Файл "/usr/lib/python3.5/site -packages / pandas / core / frame.py ", рядок 5477, у _homogenize rise_cast_failure = False) Файл" /usr/lib/python3.5/site-packages/pandas/core/series.py ", рядок 2885, у _sanitize_array raise Exception ('Дані повинні бути одновимірними') Виняток: Дані повинні бути одновимірними
Як застосувати масштабування до фрейму даних pandas, залишаючи його незмінним? Без копіювання даних, якщо це можливо.