在python处理数据时,数据标准化函数StandardScaler进行标准化数据框的某一列数据时,直接选择数据框的某列进行标准化报错:

from sklearn.preprocessing import StandardScaler
StandardScaler().fit_transform(data['Amount'])


报错提醒显示,函数需要的是二维数组,但是命令输入的是一维数组,如果你的数据是一个特征(n*1),那么使用reshape(-1,1)重塑结构,如果数据是一个样本(1*n),那么使用reshape(1,-1)重塑结构。

果然用reshape重塑后顺利:

from sklearn.preprocessing import StandardScaler
print(data['Amount'].head(5))
StandardScaler().fit_transform(data['Amount'].values.reshape(-1,1))[0:5]


是怎么个回事?

首先查看一下数据类型:

从数据框中直接选出来的某列:

print('数据框series数据类型','\n',type(data['Amount']),
'\n',
'series的结构','\n',data['Amount'].shape)
print('查看series前几个数据','\n',data['Amount'].head(6))
print('\n')


数据类型是series,Series和DataFrame是Pandas的基本数据结构,直接从数据库中选择一列数据,类型是series(选择多列时数据类型是DataFrame)。

从数据框中选择某列取values:

print('1维数组数据类型','\n',type(data['Amount'].values),
'\n',
'为什么说上面是1维数组?,请看其结构:','\n',data['Amount'].values.shape)
print('查看1维数组前几个数据',data['Amount'].values[0:6]) #无法用head()

数据类型是数组,且是1维的。

而array是Numpy的数据结构。

一维数组转变为二维数组:

#再看reshape处理的
print('2维数组数据类型','\n',type(data['Amount'].values.reshape(-1,1)),
'\n',
'为什么说上面是2维数组?,请看其结构:','\n',
data['Amount'].values.reshape(-1,1).shape)
print('查看2维数组前几个数据',data['Amount'].values.reshape(-1,1)[0:6]) #无法用head()


python中的shape与reshape函数:

二者是numpy中的函数,功能都是对于数组的形状进行操作。

shape函数可以了解数组的结构;

reshape函数可以对数组结构进行改变。

reshape常见用法:

依次生成n个自然数,并以a行b列的数组形式显示:

np.arange(10).reshape(2,5)
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
np.arange(1,21,2).reshape(2,5)
array([[ 1, 3, 5, 7, 9],
[11, 13, 15, 17, 19]])

reshape函数中的参数需要满足乘积等于数组中数据总数。

reshape(m,-1)或reshape(-1,n)

必须是矩阵格式或数组格式,才能使用,表示将其结构重组,以m行d列或d行n列的形式表示。

这个数d是计算出来的,也就是参数-1的作用。

d=数组或矩阵里面元素个数/(m或n)

print(np.arange(10))
np.arange(10).reshape(-1,5)

print(np.arange(10))
np.arange(10).reshape(5,-1)


本文地址:

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!