在 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数据帧设置Keras模型

Keras 输入 Pandas 数据框

Pandas - KeyError: '[] not in index' 训练 Keras 模型时

如何为 Keras 计算 Pandas DataFrame 的类权重?

对于 Keras ANN,Pandas 数据框的形状不正确