在 Pandas 中使用 Keras StandardScaler 和 Groupby 函数
Posted
技术标签:
【中文标题】在 Pandas 中使用 Keras StandardScaler 和 Groupby 函数【英文标题】:Using Keras StandardScaler with Groupby function in Pandas 【发布时间】:2020-11-18 05:30:34 【问题描述】:我有一个包含多列的 pandas 数据框。我需要在每一列上使用 groupby 函数,然后使用 Keras StandardScaler 函数来转换数据框中的每一列。我尝试了以下代码:
from sklearn.preprocessing import StandardScaler
scaler=StandardScaler()
df2= df.groupby('Sector').apply(lambda x: scaler.fit_transform(x.astype(float)))
但它按组返回数据列表,但是,我需要保留数据帧的初始结构。
我特别需要使用 StandardScaler,因为之后我想用它来转换测试功能。
在这种情况下有没有办法使用 StandardScaler?
【问题讨论】:
请提供一些样本数据进行测试。请花点时间阅读有关如何发布熊猫问题的信息:***.com/questions/20109391/… 【参考方案1】:我不明白你为什么要使用 group by。
获取数据副本
scaled_features = data.copy()
仅缩放几列
features = scaled_features[['column1','column2']]
scaler = StandardScaler().fit(features.values)
features = scaler.transform(features.values)
要转换列,您也可以按照自己的方式进行。或者也可以使用查询,您只能获取值与您的查询匹配的这些数据。
df_c = df['column'].apply(lambda x: scaler.fit_transform(x.astype(float)))
df_cc = df[df['column'] == '...'].apply((lambda x: scaler.fit_transform(x.astype(float)))
另一种方法是使用ColumnTransformer
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler
ct = ColumnTransformer([
('name', StandardScaler(), ['column1', 'column2'])
], remainder='passthrough')
ct.fit_transform(features)
【讨论】:
我需要 groupby 根据其值所属的组来缩放每列(我需要缩放公司财务分数,并且我需要按行业分组以获得更好的结果)。主要问题是我不知道如何结合使用 groupby 和 StandardScaler 所以我知道您的数据类型取决于行业? 对于每一列(一些数字分数)我想根据这个值所属的行业来标准化值(这就是为什么我需要在代码中按“部门”分组),但是,StandardScaler 没有在这种情况下工作以上是关于在 Pandas 中使用 Keras StandardScaler 和 Groupby 函数的主要内容,如果未能解决你的问题,请参考以下文章
从 csv 和训练中删除重复数据(Keras、python、pandas)
Pandas - KeyError: '[] not in index' 训练 Keras 模型时