Как использовать sklearn fit_transform с пандами и возвращать фрейм данных вместо массива numpy? ⇐ Python
-
Anonymous
Как использовать sklearn fit_transform с пандами и возвращать фрейм данных вместо массива numpy?
Я хочу применить масштабирование (используя StandardScaler() из sklearn.preprocessing) к кадру данных pandas. Следующий код возвращает массив numpy, поэтому я теряю все имена столбцов и индексы. Это не то, чего я хочу.
features = df[["col1", "col2", "col3", "col4"]] автомасштабирование = Стандартный масштабатор() функции = autoscaler.fit_transform(функции) Решение, которое я нашел в Интернете:
features = Features.apply(lambda x: autoscaler.fit_transform(x)) Похоже, что это работает, но приводит к предупреждению об устаревании:
/usr/lib/python3.5/site-packages/sklearn/preprocessing/data.py:583: Предупреждение об устаревании: передача массивов 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))) Но это дает:
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, в инициализация mgr = self._init_dict(data, index, columns, 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(arrays, index, dtype) Файл "/usr/lib/python3.5/site-packages/pandas/core/frame.py", строка 5477, в _гомогенизировать поднять_cast_failure=False) Файл "/usr/lib/python3.5/site-packages/pandas/core/series.py", строка 2885, в _sanitize_array поднять исключение('Данные должны быть одномерными') Исключение: данные должны быть одномерными
Как применить масштабирование к фрейму данных pandas, оставив фрейм данных нетронутым? По возможности без копирования данных.
Я хочу применить масштабирование (используя StandardScaler() из sklearn.preprocessing) к кадру данных pandas. Следующий код возвращает массив numpy, поэтому я теряю все имена столбцов и индексы. Это не то, чего я хочу.
features = df[["col1", "col2", "col3", "col4"]] автомасштабирование = Стандартный масштабатор() функции = autoscaler.fit_transform(функции) Решение, которое я нашел в Интернете:
features = Features.apply(lambda x: autoscaler.fit_transform(x)) Похоже, что это работает, но приводит к предупреждению об устаревании:
/usr/lib/python3.5/site-packages/sklearn/preprocessing/data.py:583: Предупреждение об устаревании: передача массивов 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))) Но это дает:
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, в инициализация mgr = self._init_dict(data, index, columns, 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(arrays, index, dtype) Файл "/usr/lib/python3.5/site-packages/pandas/core/frame.py", строка 5477, в _гомогенизировать поднять_cast_failure=False) Файл "/usr/lib/python3.5/site-packages/pandas/core/series.py", строка 2885, в _sanitize_array поднять исключение('Данные должны быть одномерными') Исключение: данные должны быть одномерными
Как применить масштабирование к фрейму данных pandas, оставив фрейм данных нетронутым? По возможности без копирования данных.