我目前正在研究机器学习模型,并且正在进行特征工程。我使用的数据集显示了 13 家商店中 70 多种商品的产品销售数量。
我创建了一些功能,例如根据商品的 SKU-ID(它是什么产品)计算商品的平均价格。我现在想制作每个 SKU 价格的标准偏差的特征。
以下是我用于生成所有商店特定产品平均价格的函数以及用于确定所有商店产品价格标准差的函数:
def gen_average_price(train,test,col,price='base_price',name='name'):
temp=train.groupby(col)[price].mean().reset_index().rename(columns={price:name})
train=pd.merge(train,temp,how='left',on=col)
test=pd.merge(test,temp,how='left',on=col)
train[name].fillna(np.median(temp[name]),inplace=True)
test[name].fillna(np.median(temp[name]),inplace=True)
return train,test
def gen_std_price(train,test,col,price='base_price',name='name'):
temp=train.groupby(col)[price].mean().reset_index().rename(columns={price:name})
train=pd.merge(train,temp,how='left',on=col)
test=pd.merge(test,temp,how='left',on=col)
s = np.median(temp[name])
train[name].fillna(statistics.stdev(s), inplace = True)
test[name].fillna(statistics.stdev(s), inplace = True)
return train,test
这是我用来获取特定产品平均价格的函数以及获取产品价格标准差的函数。上面的平均价格函数 (gen_average_price) 按预期工作,但是当我尝试使用我的标准偏差函数来获取产品价格的标准偏差时,我遇到了以下错误:
#Generating std dev of prices per sku-id
train,test = gen_std_price(train,test,col=['sku_id'],price='base_price',name='price_sku_id_stdev')
TypeError: 'numpy.float64' object is not iterable
谁能帮助我了解为什么会出现这种情况和/或如何解决?
以下是有关所用数据集的更多信息:
train.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 150150 entries, 0 to 150149
Data columns (total 16 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 record_ID 150150 non-null int64
1 week 150150 non-null object
2 store_id 150150 non-null int64
3 sku_id 150150 non-null int64
4 total_price 150150 non-null float64
5 base_price 150150 non-null float64
6 is_featured_sku 150150 non-null int64
7 is_display_sku 150150 non-null int64
8 units_sold 150150 non-null int64
9 count_id_sku_store 150150 non-null float64
10 count_id_sku 150150 non-null float64
11 count_id_store 150150 non-null float64
12 price_sku_store 150150 non-null float64
13 price_to_sku_store 150150 non-null float64
14 price_store_id 150150 non-null float64
15 price_sku_id 150150 non-null float64
dtypes: float64(9), int64(6), object(1)
memory usage: 19.5+ MB
test.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 13860 entries, 0 to 13859
Data columns (total 15 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 record_ID 13860 non-null int64
1 week 13860 non-null object
2 store_id 13860 non-null int64
3 sku_id 13860 non-null int64
4 total_price 13860 non-null float64
5 base_price 13860 non-null float64
6 is_featured_sku 13860 non-null int64
7 is_display_sku 13860 non-null int64
8 count_id_sku_store 13860 non-null float64
9 count_id_sku 13860 non-null float64
10 count_id_store 13860 non-null float64
11 price_sku_store 13860 non-null float64
12 price_to_sku_store 13860 non-null float64
13 price_store_id 13860 non-null float64
14 price_sku_id 13860 non-null float64
dtypes: float64(9), int64(5), object(1)
memory usage: 1.7+ MB