我有一个带有混合类型列的pandas数据框架,我想将sklearn的min_max_scaler应用于其中一些列。理想情况下,我希望在适当的地方进行这些转换,但还没有找到一种方法。我编写了以下代码:
将熊猫作为pd导入
将numpy作为np导入
从sk学习导入预处理
scaler=preprocessing.MinMaxScaler()
dfTest=pd.DataFrame({'A':[14.00,90.20,90.95,96.27,91.21],'B':[103.02107.26110.35114.23114.68],'C':['big','small','big','small','small']))
min_max_scaler=预处理。MinMaxScaler()
def刻度列(df、cols_至_刻度):
对于cols_至_比例中的col:
df[col]=pd.DataFrame(最小值最大值缩放变换(pd.DataFrame(dfTest[col])),columns=[col])
返回df
dfTest
A、B、C
0 14.00 103.02大
190.20 107.26小型
290.95110.35大
396.27114.23小型
491.21114.68小型
scaled_df=scaleColumns(dfTest,['A','B'])
标度
A、B、C
0.000000 0.000000大
1 0.926219 0.363636小
20.935335 0.628645大
3.1000000.961407小型
4 0.938495 1.000000小
我很好奇这是否是进行这种转换的首选/最有效的方法。有没有更好的方法可以使用df.apply
我还感到惊讶的是,我无法使用以下代码:
bad\u output=min\u max\u scaler.fit\u变换(dfTest['A'])
如果我将整个数据帧传递给定标器,它将工作:
dfTest2=dfTest.drop('C',轴=1)
良好的输出=最小最大缩放器。拟合变换(dfTest2)
输出良好
我不明白为什么将序列传递给定标器会失败。在上面的完整工作代码中,我希望只将一个序列传递给scaler,然后将dataframe column=设置为缩放序列。我在其他一些地方看到过这个问题,但没有找到好的答案。任何帮助了解这里发生的事情都将不胜感激
我不确定以前版本的pandas是否阻止了这一点,但现在下面的代码片段非常适合我,可以生成您想要的内容,而无需使用apply
>&燃气轮机&燃气轮机;作为pd进口熊猫
&燃气轮机&燃气轮机&燃气轮机;从sklearn.preprocessing导入MinMaxScaler
&燃气轮机&燃气轮机&燃气轮机;scaler=MinMaxScaler()
&燃气轮机&燃气轮机&燃气轮机;dfTest=pd.DataFrame({'A':[14.00,90.20,90.95,96.27,91.21],
‘B’:[103.02107.26110.35114.23114.68],
‘C’:[‘大’、‘小’、‘大’、‘小’、‘小’]]
&燃气轮机&燃气轮机&燃气轮机;dfTest[['A',B']]=scaler.fit_变换(dfTest[[A',B']]
&燃气轮机&燃气轮机&燃气轮机;dfTest
A、B、C
0.000000 0.000000大
1 0.926219 0.363636小
20.935335 0.628645大
3.1000000.961407小型
4 0.938495 1.000000小