微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 MinMaxScaler() 对所有列应用标准化,但排除分类?

如何解决如何使用 MinMaxScaler() 对所有列应用标准化,但排除分类?

我刚开始使用 MinMaxScaler,所以如果这是一个非常非常简单的问题,请不要咬我的头。下面,我有以下数据集:

sample_df.head(2)

ID     S_LENGTH     S_WIDTH     P_LENGTH     P_WIDTH     SPECIES
-------------------------------------------------------------------
1      3.5          2.5          5.6         1.7        VIRGINICA
2      4.5          5.6          3.4         8.7         SetoSA

因此,如何使用下面的代码对该数据集应用规范化到我的所有列,不包括 IDSPECIES 列?

我基本上想使用 preprocessing.MinMaxScaler() 来应用归一化,以便所有特征都在 0 和 1 的范围内。

这是我正在使用的代码...

min_max = preprocessing.MinMaxScaler()
min_max.fit_transform(sample_df)

...但是当我执行它时,我收到此错误

ValueError: Could not convert string to float: 'SetoSA'

对于如何完成我想做的事情的任何帮助都非常感谢!

另外,如果这是一个非常愚蠢的问题,我真诚地道歉,但我是新手

谢谢!

编辑(显示错误):

或者,如果我这样做...

min_max = preprocessing.MinMaxScaler()
min_max.fit_transform(sample_df[['S_LENGTH','S_WIDTH']])

sample_df.head(2)

...我收到此错误

AttributeError: 'numpy.ndarray' object has no attribute 'sample'

解决方法

我怀疑这会很有帮助,但是,您可以通过以下方式获取 numeric 列:

num_df = df[[i for i in df.columns if df[i].dtypes != 'O']]

num_df
Out[126]: 
   ID  S_LENGTH  S_WIDTH  P_LENGTH  P_WIDTH
0   1       3.5      2.5       5.6      1.7
1   2       4.5      5.6       3.4      8.7

然后在其上应用 MinMaxScaler

min_max = preprocessing.MinMaxScaler()
min_max.fit_transform(num_df)

Out[129]:
array([[0.,0.,1.,0.],[1.,1.]])

编辑: 使用您的 df

df
Out[162]: 
   ID  S_LENGTH  S_WIDTH  P_LENGTH  P_WIDTH    SPECIES
0   1       3.5      2.5       5.6      1.7  VIRGINICA
1   2       4.5      5.6       3.4      8.7     SETOSA

使用以下代码:

num_df = min_max.fit_transform(pd.DataFrame((df[[i for i in df.columns if df[i].dtypes != 'O']])))
num_df.columns = [i for i in df.columns if df[i].dtypes != 'O']
cat_df = (df[[i for i in df.columns if df[i].dtypes == 'O']])
res = pd.merge(num_df,cat_df,left_index=True,right_index=True)

这会给你:

print(res)

    ID  S_LENGTH  S_WIDTH  P_LENGTH  P_WIDTH    SPECIES
0  0.0       0.0      0.0       1.0      0.0  VIRGINICA
1  1.0       1.0      1.0       0.0      1.0     SETOSA

逐行尝试代码,如果这是您需要的,请告诉我。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。