Python sklearn normalize()将每个值生成为1

Python sklearn normalize()将每个值生成为1,python,pandas,scikit-learn,normalization,Python,Pandas,Scikit Learn,Normalization,我试图将单个特性规范化为[0,1],但我得到的结果是所有浮点值都是1,这显然是错误的 import pandas as pd import numpy as np from sklearn.preprocessing import normalize test = pd.DataFrame(data=[7, 6, 5, 2, 9, 9, 7, 8, 6, 5], columns=['data']) normalize(test['data'].values.reshape(-1, 1)) 这

我试图将单个特性规范化为[0,1],但我得到的结果是所有浮点值都是1,这显然是错误的

import pandas as pd
import numpy as np
from sklearn.preprocessing import normalize

test = pd.DataFrame(data=[7, 6, 5, 2, 9, 9, 7, 8, 6, 5], columns=['data'])
normalize(test['data'].values.reshape(-1, 1))
这将产生以下输出:

array([[1.],
       [1.],
       [1.],
       [1.],
       [1.],
       [1.],
       [1.],
       [1.],
       [1.],
       [1.]])

我认为这可能是一个int-to-float数据类型的问题,所以我尝试先转换为float,
normalize(test['data'].astype(float).values.reformate(-1,1))
,但这给出了相同的结果。我缺少什么?

这是因为默认的
轴是1

设置
轴=0

normalize(test['data'].values.reshape(-1, 1), axis=0)
输出:

array([[0.32998316],
       [0.28284271],
       [0.23570226],
       [0.0942809 ],
       [0.42426407],
       [0.42426407],
       [0.32998316],
       [0.37712362],
       [0.28284271],
       [0.23570226]])

我觉得我们可以用

(test.data-test.data.min())/np.ptp(test.data.values)
Out[136]: 
0    0.714286
1    0.571429
2    0.428571
3    0.000000
4    1.000000
5    1.000000
6    0.714286
7    0.857143
8    0.571429
9    0.428571
Name: data, dtype: float64

非常奇怪-通常
axis=1
对应一列(在我心目中是一个特性),所以我认为默认值是可以的。我想当我使用
restrape
来满足
sklearn
的2D数组要求时,它现在被看作是一个“行”样本,而不是一个列/特征。@JulianDrago,因为默认情况下它是
l2
标准。尝试
norm='max'
:)从数字上看,这看起来是正确的,所以+1,尽管我对基于
sklearn
的解决方案感兴趣。