python使用standarescaler()标准化数据框指定列

本文记录如何对数据框的指定列进行归一化

(其实我一开始是想找到一个方法,能直接对数据框的列做归一化,并就地修改,但是我找不到,他貌似必须得先存为一个np然后再转为数据框,再跟原先的数据框拼接,最后还要把原来没归一化的列drop...加上查scaler函数的用法很多文章都是直接对np进行标准化,所以写一篇详细记录一下如果要对数据框的数据进行归一化如何具体实施)

import sklearn.preprocessing as pre
minmax=pre.MinMaxScaler()
age_minmax=minmax.fit_transform(x['Age'])

打算使用sklearn的MinMaxScaler()对数据框x的'Age'列进行归一化,使其取值落在[0,1],但是直接按照上文所运行发现报错,提示

Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

然后上网查,说是因为sklearn新版不允许输入一列,必须要输入矩阵,这样就可以

age_minmax=minmax.fit_transform(x['Age'].reshape(-1,1))

也就是加上.reshape(-1,1)

这下我出现了新的报错

'Series' object has no attribute 'reshape'

上网查,提示说加上.values就可以,也就是:

age_minmax=minmax.fit_transform(x['Age'].values.reshape(-1,1))

成功了,但是这样输出的是np array,我们需要把他放回数据框里

很自然,我们想到pd.DataFrame() & pd.concat()

我们顺便在第一个函数里加上columns=['age_minmax']以对列进行命名,so that concat的时候能够有列名

age_minmax=pd.DataFrame(minmax.fit_transform(x['Age'].values.reshape(-1,1)),columns=['age_minmax'])
fare_minmax=pd.DataFrame(minmax.fit_transform(x['Fare'].values.reshape(-1,1)),columns=['fare_minmax'])
pd.concat([x,age_minmax,fare_minmax],axis=1)

好啦,这样就搞定了

全部代码:

import sklearn.preprocessing as pre
minmax  =  pre.MinMaxScaler()
age_minmax=pd.DataFrame(minmax.fit_transform(x['Age'].values.reshape(-1,1)),columns=['age_minmax'])
fare_minmax=pd.DataFrame(minmax.fit_transform(x['Fare'].values.reshape(-1,1)),columns=['fare_minmax'])
pd.concat([x,age_minmax,fare_minmax],axis=1)

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值