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

Python电信客户流失数据预处理报错:无法将字符串转为浮点数

解决StandardScaler处理时无法将字符串转换为浮点数的问题

问题根源很明确:StandardScaler只能处理数值型数据,你传入的数据里包含了像4223-BKEOR这样的字符串列,导致缩放时无法转换类型报错。下面是具体的排查和解决步骤:

排查步骤

  • 先查看数据集的列类型,找出所有字符串(object类型)的列:
    print(df.dtypes)
    
    定位到4223-BKEOR所在的列,判断它的作用:
    • 如果是客户ID、唯一编号这类无关建模的标识列,直接剔除即可;
    • 如果是性别、合同类型这类分类特征,需要先转成数值型再缩放。

具体解决方法

方法1:剔除无关字符串列

假设字符串列是CustomerID,在拆分数据前后都可以去掉这列:

# 假设X是你的特征数据集
X = X.drop('CustomerID', axis=1)

# 再执行缩放
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

方法2:对分类字符串列做编码

如果是分类特征,比如Contract、PaymentMethod这类列,先做编码转换:

from sklearn.preprocessing import OneHotEncoder
import pandas as pd

# 分离数值列和分类列
numeric_cols = X.select_dtypes(include=['int64', 'float64']).columns
categorical_cols = X.select_dtypes(include=['object']).columns

# 对分类列做独热编码(避免标签编码的顺序偏差)
encoder = OneHotEncoder(sparse_output=False, drop='first')
encoded_categoricals = encoder.fit_transform(X[categorical_cols])
# 转成DataFrame方便合并
encoded_df = pd.DataFrame(encoded_categoricals, columns=encoder.get_feature_names_out(categorical_cols))

# 合并数值列和编码后的分类列
X_processed = pd.concat([X[numeric_cols].reset_index(drop=True), encoded_df.reset_index(drop=True)], axis=1)

# 最后执行缩放
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_processed)

注意事项

如果是在Split_data函数内处理,要保证训练集和测试集的处理逻辑一致:训练集用fit_transform(拟合并转换),测试集只用transform(用训练集的拟合规则转换),不能单独对测试集做fit操作。

内容的提问来源于stack exchange,提问作者Sindhura S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:30:43