如何解决如何使用 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
因此,如何使用下面的代码对该数据集应用规范化到我的所有列,不包括 ID
和 SPECIES
列?
我基本上想使用 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 举报,一经查实,本站将立刻删除。