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

如何用sklearn StandardScaler处理pandas DataFrame并保留列名?

问题解决:缩放DataFrame后列名丢失与statsmodels回归报错

问题根源

  1. 列名丢失:StandardScaler.fit_transform()返回的是numpy数组,转成DataFrame时未指定列名,导致原列名Inflation、Homes被替换成0、1。
  2. 回归公式错误:你使用的公式1 ~ 0不符合OLS回归语法——既没有指定因变量也没有自变量,statsmodels无法生成有效回归矩阵,最终触发维度相关报错。

解决步骤

1. 恢复原始列名

将缩放后的数组转回DataFrame时,显式指定columns参数为原始特征列表,就能保留原来的列名:

# 替换原转DataFrame代码
df_scaled = pd.DataFrame(std_scaler.fit_transform(X), columns=num_features)

2. 修正OLS回归公式

根据分析需求,明确指定因变量和自变量。比如以Homes为因变量、Inflation为自变量:

  • 带截距回归:Homes ~ Inflation
  • 不带截距回归:Homes ~ Inflation - 1(或Homes ~ 0 + Inflation)

修正后的完整代码

import pandas as pd
from sklearn.preprocessing import StandardScaler
import statsmodels.formula.api as smf

# 读取数据
df = pd.read_excel("C:/Users/ME/OneDrive/Desktop/simple regress.xlsx")
print(df)

# 定义特征并缩放
num_features = ['Inflation', 'Homes']
X = df[num_features]
std_scaler = StandardScaler() 
# 转回DataFrame时保留原始列名
df_scaled = pd.DataFrame(std_scaler.fit_transform(X), columns=num_features)

# 执行OLS回归(示例:Homes为因变量,Inflation为自变量,带截距)
result = smf.ols(formula='Homes ~ Inflation', data=df_scaled).fit()
# 查看回归结果
print(result.summary())

内容的提问来源于stack exchange,提问作者Tony Cardinal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 10:33:17