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

如何使用sklearn MinMaxScaler对DataFrame进行条件缩放(保留0值)

解决方案:无需拆分DataFrame即可实现非0值缩放

你的拆分合并方法虽然能实现需求,但并非最优方案——拆分合并会增加额外的操作步骤,在处理大型数据集时还会影响效率。实际上可以直接在原DataFrame上完成非0值的缩放,以下是两种简洁高效的实现方式:

方法1:手动实现缩放逻辑

先提取非0值的最大、最小值,通过条件赋值直接修改目标列(或生成新列):

import pandas as pd
import numpy as np

# 示例DataFrame
df = pd.DataFrame({'col': [0, 2, -3, 0, 5, -1, 0, 4]})

# 获取非0值的极值
non_zero = df['col'] != 0
min_val = df.loc[non_zero, 'col'].min()
max_val = df.loc[non_zero, 'col'].max()

# 缩放非0值到[-1,1],0值保持不变
df['scaled_col'] = np.where(
    non_zero,
    2 * (df['col'] - min_val) / (max_val - min_val) - 1,
    df['col']
)

公式说明:2*(x - min)/(max - min) -1 是将[min, max]区间的值映射到[-1,1]的转换逻辑,保证原非0值的最小值变为-1,最大值变为1,中间值按比例缩放。

方法2:结合sklearn的MinMaxScaler实现

如果习惯用sklearn的预处理工具,可以先对整列缩放,再还原0值:

from sklearn.preprocessing import MinMaxScaler

# 示例DataFrame
df = pd.DataFrame({'col': [0, 2, -3, 0, 5, -1, 0, 4]})

scaler = MinMaxScaler(feature_range=(-1, 1))
# 对整列执行缩放
df['scaled_col'] = scaler.fit_transform(df[['col']])
# 将原列是0的位置还原为0
df.loc[df['col'] == 0, 'scaled_col'] = 0

这种方法适合已经在使用sklearn数据预处理流水线的场景,代码更简洁。

总结

上述两种方法都无需拆分、合并DataFrame,直接在原数据集上操作,代码更简洁,执行效率也更高,尤其是处理大规模数据时优势明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 17:29:55