![](/img/trans.png)
[英]preprocessing.MinMaxScaler and preprocessing.normalize return dataframe of Nulls
[英]Python/sklearn - preprocessing.MinMaxScaler 1d deprecation
我想縮放一個數據幀的列,使其值介於0和1之間。為此,我使用MinMaxScaler
,它工作正常,但是向我發送混合消息。 我正在做:
x = df['Activity'].values #returns a numpy array
min_max_scaler = preprocessing.MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(x)
df['Activity'] = pd.Series(x_scaled)
此代碼的消息numero uno是一個警告:
DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.
好吧,所以具有1d數組的四胞胎將是不久的,所以讓我們按照建議重塑它:
x = df['Activity'].values.reshape(-1, 1)
現在代碼甚至沒有運行: Exception: Data must be 1-dimensional
的拋出。 所以我很困惑。 1d即將被棄用,但數據也必須是1d ?? 如何安全地做到這一點? 這是什么問題?
按照@sascha的要求編輯
x
看起來像這樣:
array([ 0.00568953, 0.00634314, 0.00718003, ..., 0.01976002,
0.00575024, 0.00183782])
重塑后:
array([[ 0.00568953],
[ 0.00634314],
[ 0.00718003],
...,
[ 0.01976002],
[ 0.00575024],
[ 0.00183782]])
整個警告:
/usr/local/lib/python3.5/dist-packages/sklearn/preprocessing/data.py:321: DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.
warnings.warn(DEPRECATION_MSG_1D, DeprecationWarning)
/usr/local/lib/python3.5/dist-packages/sklearn/preprocessing/data.py:356: DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.
warnings.warn(DEPRECATION_MSG_1D, DeprecationWarning)
我重塑時的錯誤:
---------------------------------------------------------------------------
Exception Traceback (most recent call last)
<ipython-input-132-df180aae2d1a> in <module>()
2 min_max_scaler = preprocessing.MinMaxScaler()
3 x_scaled = min_max_scaler.fit_transform(x)
----> 4 telecom['Activity'] = pd.Series(x_scaled)
/usr/local/lib/python3.5/dist-packages/pandas/core/series.py in __init__(self, data, index, dtype, name, copy, fastpath)
225 else:
226 data = _sanitize_array(data, index, dtype, copy,
--> 227 raise_cast_failure=True)
228
229 data = SingleBlockManager(data, index, fastpath=True)
/usr/local/lib/python3.5/dist-packages/pandas/core/series.py in _sanitize_array(data, index, dtype, copy, raise_cast_failure)
2918 elif subarr.ndim > 1:
2919 if isinstance(data, np.ndarray):
-> 2920 raise Exception('Data must be 1-dimensional')
2921 else:
2922 subarr = _asarray_tuplesafe(data, dtype=dtype)
Exception: Data must be 1-dimensional
你可以簡單地刪除pd.Series
:
import pandas as pd
from sklearn import preprocessing
df = pd.DataFrame({'Activity': [ 0.00568953, 0.00634314, 0.00718003,
0.01976002, 0.00575024, 0.00183782]})
x = df['Activity'].values.reshape(-1, 1) #returns a numpy array
min_max_scaler = preprocessing.MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(x)
df['Activity'] = x_scaled
或者您可以顯式獲取x_scaled
第一列:
df['Activity'] = pd.Series(x_scaled[:, 0])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.