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

numpy调用已弃用DataFrame.swapaxes触发警告,如何解决?

解决numpy.split处理Pandas DataFrame时触发的FutureWarning警告

问题场景

在Jupyter Notebook中执行数据拆分代码时,触发了FutureWarning:

train, val, test = np.split(df.sample(frac=1), [int(0.8*len(df)), int(0.9*len(df))])

警告详情:

Anaconda3\lib\site-packages\numpy\core\fromnumeric.py:59: FutureWarning: 'DataFrame.swapaxes' is deprecated and will be removed in a future version. Please use 'DataFrame.transpose' instead.
return bound(*args, **kwds)

附使用的DataFrame结构:
DataFrame结构截图

触发原因

这是numpy与pandas的版本兼容问题:numpy的split函数内部调用了pandas已弃用的DataFrame.swapaxes方法,而pandas已明确标记该方法过时,推荐使用DataFrame.transpose替代。目前这是numpy官方已知的未修复问题。

消除警告的解决方法

方案1:改用Pandas原生切片拆分(推荐)

直接使用pandas的iloc索引切片操作拆分打乱后的DataFrame,完全避开numpy的split函数,从根源避免兼容问题:

# 先打乱数据
shuffled_df = df.sample(frac=1)
# 按比例拆分
train = shuffled_df.iloc[:int(0.8 * len(df))]
val = shuffled_df.iloc[int(0.8 * len(df)) : int(0.9 * len(df))]
test = shuffled_df.iloc[int(0.9 * len(df)):]

方案2:临时屏蔽指定警告

如果不想修改现有代码逻辑,可以针对性屏蔽这个FutureWarning,仅隐藏该提示不影响功能:

import warnings

# 上下文管理器中屏蔽指定警告
with warnings.catch_warnings():
    warnings.filterwarnings(
        "ignore",
        category=FutureWarning,
        message="'DataFrame.swapaxes' is deprecated"
    )
    train, val, test = np.split(df.sample(frac=1), [int(0.8*len(df)), int(0.9*len(df))])

注意:此方法只是隐藏警告,未解决底层兼容问题,适合临时过渡使用。

方案3:升级numpy至修复版本

等待numpy官方发布修复该兼容问题的版本后,升级numpy到对应版本即可彻底解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:23:27