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

Python中DataFrame归一化遇类型错误与语法错误求助

问题解决步骤

1. 先修复语法错误

你修改后的代码存在括号不匹配问题,这是导致SyntaxError的直接原因。看这行代码:

df_min_max_scaled[column] = (df_min_max_scaled[column]) - float(df_min_max_scaled[column].min()) / float((df_min_max_scaled[column].max()) - float(df_min_max_scaled[column].min())

嵌套的float()调用缺少闭合括号,且整个表达式的括号逻辑混乱。不过这行代码的核心逻辑也有问题,根源还是列类型不对,下面会说正确的处理方式。

2. 解决根源问题:字符串列无法做数值运算

第一个错误TypeError: unsupported operand type(s) for -: 'str' and 'str',说明你的DataFrame中存在字符串类型的列,必须先将这些列转换为数值类型(比如float),才能执行归一化的数值运算。

正确的手动实现代码

import pandas as pd

# 复制数据
df_min_max_scaled = df.copy()

# 遍历列,先转数值类型再做归一化
for column in df_min_max_scaled.columns:
    # 将列转为float,无法转换的内容设为NaN(避免报错)
    df_min_max_scaled[column] = pd.to_numeric(df_min_max_scaled[column], errors='coerce')
    
    # 获取列的最大最小值,跳过全空或值都相同的列(防止除以0)
    col_min = df_min_max_scaled[column].min()
    col_max = df_min_max_scaled[column].max()
    if col_max != col_min:
        df_min_max_scaled[column] = (df_min_max_scaled[column] - col_min) / (col_max - col_min)

# 查看结果
print(df_min_max_scaled)

关键说明

  • 不要只单独转换min()或max()的结果,因为整个列还是字符串类型,直接做减法依然会报错,必须先把整列转为数值类型。
  • pd.to_numeric的errors='coerce'参数会把非数值的字符串转为NaN,避免转换过程中直接报错。
  • 增加col_max != col_min的判断,防止列中所有值相同导致除以0的错误。

3. 更简洁的实现方式(用sklearn)

如果允许使用第三方库,sklearn的MinMaxScaler可以更高效地完成归一化,还能自动筛选数值列:

from sklearn.preprocessing import MinMaxScaler
import pandas as pd

scaler = MinMaxScaler()
# 筛选出所有数值类型的列
numeric_cols = df.select_dtypes(include=['number']).columns

df_min_max_scaled = df.copy()
# 仅对数值列执行归一化
df_min_max_scaled[numeric_cols] = scaler.fit_transform(df[numeric_cols])

print(df_min_max_scaled)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:25:37