You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Scikit-learn按标准差标准化DataFrame及left-x列?

嘿,这两个问题都是围绕Scikit-learn的StandardScaler实现按标准差的标准化(Z-score标准化),公式是(x - 均值)/标准差,我给你一步步拆解解决方案:

1. 对整个DataFrame进行标准差标准化

首先得导入需要的库,然后按步骤来:

  • 初始化StandardScaler对象,它会帮我们计算每列的均值和标准差,再用这两个值做标准化
  • 用fit_transform处理DataFrame的数值列(如果有非数值列,记得先过滤,不然会报错)
  • 把处理后的数组转回DataFrame,保留原列名

代码示例:

import pandas as pd
from sklearn.preprocessing import StandardScaler

# 先搞个示例DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5],
    'B': [10, 20, 30, 40, 50],
    'C': [100, 200, 300, 400, 500]
})

# 初始化标准化器
scaler = StandardScaler()

# 对所有数值列做标准化(这里示例里全是数值列)
scaled_data = scaler.fit_transform(df)

# 转回DataFrame,保留原列名
scaled_df = pd.DataFrame(scaled_data, columns=df.columns)

print(scaled_df)

小贴士:如果之后要对新数据做同样的标准化,只用调用scaler.transform(new_data)就行,别再fit了,避免数据泄露哦!

2. 对DataFrame中的特定列(left-x列)进行标准差标准化

这里分两种场景,看你需求选:

方法一:单独处理目标列后替换回原DataFrame

适合只需要标准化left-x列,其他列保持原样的情况:

import pandas as pd
from sklearn.preprocessing import StandardScaler

# 示例DataFrame
df = pd.DataFrame({
    'left-x': [5, 10, 15, 20, 25],
    'other_num_col': [1, 2, 3, 4, 5],
    'other_cat_col': ['a', 'b', 'c', 'd', 'e']
})

scaler = StandardScaler()

# 注意:Scikit-learn的转换器期望输入是二维数组,所以要用df[['left-x']](双括号),不能用df['left-x']
# 如果你想新增一列存标准化后的值:
df['left-x_scaled'] = scaler.fit_transform(df[['left-x']])

# 要是想直接替换原列,就写:
# df['left-x'] = scaler.fit_transform(df[['left-x']])

print(df)

方法二:用ColumnTransformer批量处理(适合多列场景)

如果你的DataFrame里有多个数值列,只想标准化left-x,其他数值列和非数值列都保留,用ColumnTransformer更高效:

import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.compose import ColumnTransformer

# 示例DataFrame
df = pd.DataFrame({
    'left-x': [5, 10, 15, 20, 25],
    'another_num_col': [100, 200, 300, 400, 500],
    'cat_col': ['x', 'y', 'z', 'x', 'y']
})

# 定义转换器:只对"left-x"应用StandardScaler,其他列直接保留
preprocessor = ColumnTransformer(
    transformers=[
        ('scaler', StandardScaler(), ['left-x'])
    ],
    remainder='passthrough'  # 这句很重要,保留未指定的所有列
)

# 处理数据并转回DataFrame
processed_data = preprocessor.fit_transform(df)
processed_df = pd.DataFrame(processed_data, columns=preprocessor.get_feature_names_out())

print(processed_df)

内容的提问来源于stack exchange,提问作者JP Ventura

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:11:46