【问题标题】:How to apply transform method to partial data frame如何将变换方法应用于部分数据框
【发布时间】:2021-10-01 05:20:53
【问题描述】:

我有一个包含许多列的数据框。我想将from sklearn.preprocessing import MinMaxScaler 中的MinMaxScaler 应用于数据框。

但是,之前我将两个数据框合并为一个,并添加了一个“类型”列来区分。所以'type'列有两个值'train'和'test'。

现在当我想对它应用标量时,它会抛出错误,说值应该是数字。我明白了。

所以我写了这样的代码:

scalar = MinMaxScaler()
data = pd.DataFrame(scalar.fit_transform(data), columns=data.columns.drop("type"))

data.head()

这意味着我只给它指定的列,对吗?但我仍然遇到同样的错误。

---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

<ipython-input-216-85712d22d323> in <module>
      1 scalar = MinMaxScaler()
----> 2 data = pd.DataFrame(scalar.fit_transform(data), columns=data.columns.drop("type"))
      3 
      4 data.head()
      5 

ValueError: could not convert string to float: 'train'

我想要的只是将转换应用于除特定“类型”列之外的所有列。有没有办法用熊猫做到这一点?如果没有,有什么替代方案?

我是这些东西的新手,所以请多解释一下你的解决方案。

我还注意到 sklearn 的所有方法都适用于 numpy 而不是 pandas 数据框。一切都将数组作为参数而不是数据框。是否可以将数据帧作为输入发送?

【问题讨论】:

    标签: python pandas scikit-learn


    【解决方案1】:

    您仍在将MinMaxScaler 应用于整个数据框 scalar.fit_transform(data).

    解决此问题的一种方法是:

    1. 创建一个没有“类型”列的新数据框df
    2. MinMaxScaler 缩放 df 并再次将其包装在 pandas 数据框中
    3. 将原始数据框的“类型”列添加到df

    下面是对应的代码:

    from sklearn.preprocessing import MinMaxScaler
    import pandas as pd
    
    
    df = data.drop("type", axis=1)
    df = pd.DataFrame(
        MinMaxScaler().fit_transform(df),
        columns=df.columns
    )
    df["type"] = data["type"]
    

    关于您关于熊猫数据框的问题作为输入,一般没有问题。 scikit-learn API 假定 array-like 对象包括 pandas 数据帧。但是请注意,返回类型(也称为 output)通常是一个 numpy 数组,可能需要注意(如上面的第 2 步)。

    【讨论】:

      猜你喜欢
      • 2014-10-10
      • 2020-04-08
      • 2021-09-17
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      • 2019-02-05
      相关资源
      最近更新 更多