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

sklearn fit_transform()出现CopyWarning,三种尝试仍未解决

解决OrdinalEncoder赋值时的CopyWarning问题

你遇到的问题核心在于OrdinalEncoder.fit_transform()返回的是二维数组,直接赋值给Pandas单列时,会触发关于视图/副本的警告。可以通过以下方式解决:

ordinal = OrdinalEncoder(categories=[['F','E','D','C','B','A']])
# 用ravel()将二维转换结果转为一维数组
X['merchant_category'] = ordinal.fit_transform(X[['merchant_category']]).ravel()

也可以用flatten()替代ravel(),二者差异在于ravel()优先返回原数组视图(若允许),flatten()则始终返回副本,两种写法都能消除警告。

如果想要更稳妥,也可以先构造匹配索引的Series再赋值:

transformed_series = pd.Series(
    ordinal.fit_transform(X[['merchant_category']]).ravel(),
    index=X.index
)
X['merchant_category'] = transformed_series

你之前三种写法触发警告的原因:

  • 不管是直接列索引还是用.loc切片,右侧的二维数组和目标单列的维度不匹配,Pandas无法确定操作是在原数据上修改还是创建副本,因此抛出CopyWarning
  • 即使左侧用.loc确保是视图操作,右侧的二维结构依然会触发隐式转换的副本检测

内容的提问来源于stack exchange,提问作者Mathis D.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:25:27