我有一个带有混合类型列的pandas数据帧,我想将sklearn的min_max_scaler应用于某些列.理想情况下,我想在适当的位置进行这些转换,但还没有想出办法.我编写了以下代码:
import pandas as pd
import numpy as np
from sklearn import preprocessing
scaler = preprocessing.MinMaxScaler()
dfTest = pd.DataFrame({'A':[14.00,90.20,90.95,96.27,91.21],'B':[103.02,107.26,110.35,114.23,114.68], 'C':['big','small','big','small','small']})
min_max_scaler = preprocessing.MinMaxScaler()
def scaleColumns(df, cols_to_scale):
for col in cols_to_scale:
df[col] = pd.DataFrame(min_max_scaler.fit_transform(pd.DataFrame(dfTest[col])),columns=[col])
return df
dfTest
A B C
0 14.00 103.02 big
1 90.20 107.26 small
2 90.95 110.35 big
3 96.27 114.23 small
4 91.21 114.68 small
scaled_df = scaleColumns(dfTest,['A','B'])
scaled_df
A B C
0 0.000000 0.000000 big
1 0.926219 0.363636 small
2 0.935335 0.628645 big
3 1.000000 …Run Code Online (Sandbox Code Playgroud) 我正在使用库中的模块Pipeline对我的数据集执行特征工程。ColumnTransformersklearn
数据集最初看起来像这样:
| 日期 | 日期块编号 | 店铺ID | 商品编号 | 商品价格 |
|---|---|---|---|---|
| 2013年1月2日 | 0 | 59 | 22154 | 999.00 |
| 2013年1月3日 | 0 | 25 | 2552 | 899.00 |
| 2013年1月5日 | 0 | 25 | 2552 | 899.00 |
| 2013年1月6日 | 0 | 25 | 2554 | 1709.05 |
| 2013年1月15日 | 0 | 25 | 2555 | 1099.00 |
$> data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2935849 entries, 0 to 2935848
Data columns (total 6 columns):
# Column Dtype
--- ------ -----
0 date object
1 date_block_num object
2 shop_id object
3 item_id object
4 item_price float64
dtypes: float64(2), int64(3), object(1)
memory usage: 134.4+ MB …Run Code Online (Sandbox Code Playgroud)