【问题标题】:How to normalize dataframe by standard deviation using scikit-learn?如何使用 scikit-learn 通过标准差标准化数据帧?
【发布时间】:2018-08-12 13:58:07
【问题描述】:

给定以下数据框和left-x 列:

|       | left-x | left-y | right-x | right-y |
|-------|--------|--------|---------|---------|
| frame |        |        |         |         |
| 0     | 149    | 181    | 170     | 175     |
| 1     | 149    | 181    | 170     | 175     |
| 2     | 149    | 181    | 170     | 175     |
| 3     | 149    | 181    | 170     | 175     |

我怎样才能使用scikit-learn library按标准差标准化left-x

【问题讨论】:

  • 您可以使用来自 sklearn.preprocessing 模块的 Standard Scaler。
  • @ManishSaraswat,你介意写一个例子吗?
  • @JPVentura 我已经发布了答案。

标签: python pandas sklearn-pandas


【解决方案1】:

不用sci-kit-learn也可以通过标准差进行归一化,如下:

df['left-x'] = df['left-x'] / df['left-x'].std()

或者,如果您还想将数据平均居中:

df['left-x'] = (df['left-x'] - df['left-x'].mean())/df['left-x'].std()

这里的df 是你的asl.df[l] 变量。

.std() 方法给出了数据框在给定轴上的标准偏差。通过首先选择一列,仅计算该列的标准差。

如果你需要做很多并且想要避免混乱,你可以将它包装成一个函数,例如

def std_norm(df, column):
    c = df[column]
    df[column] = (c - c.mean())/c.std()

你称它为:

std_norm(df, 'left-x')

请注意,这会就地更新传递的 DataFrame。

【讨论】:

  • 我知道我可以做(df['left-x'] - df['left-x'].mean())/df['left-x'].std(),但这是一个非常常见的操作,我想知道是否有开箱即用的normalize函数。
  • @JPVentura 如果任何地方都希望它出现在 pandas 本身(而不是 sci-kit)中,但我不知道。您可以将其包装到一个函数中以重复使用以降低噪音。我添加了一个示例。
【解决方案2】:

您可以使用来自sklearn.preprocessing 模块的缩放功能。

from sklearn.preprocessing import StandardScaler

sc = StandardScaler()
sc.fit(df['left-x'])

df['left-x'] = sc.transform(df['left-x'])

【讨论】:

    猜你喜欢
    • 2021-01-15
    • 2021-05-03
    • 2014-03-31
    • 2014-10-17
    • 2019-01-14
    • 2016-04-18
    • 2013-01-19
    • 2019-11-14
    • 2016-05-08
    相关资源
    最近更新 更多