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

Pandas函数内DataFrame变更未生效:调用test函数仅第一个函数生效

问题成因

有两个核心原因共同导致了该问题:

  • 第一是函数执行顺序逻辑错误:你在test函数中先调用missing函数把DataFrame里所有的空值填充为0,原本全为空值的列经过填充后已经全部变为0,后续再调用drop_nan_columns删除全空列时,已经没有符合条件的列,自然不会产生任何修改效果
  • 第二是drop_nan_columns的代码写法存在错误:df.dropna方法设置inplace=True时,会直接修改原DataFrame对象,返回值为None,你把返回的None赋值给了函数内部的局部变量df,虽然本次操作中因为inplace已经先修改了原对象不会直接导致问题,但这种写法非常不规范,一旦后续调整代码去掉inplace参数,就会直接导致修改无法同步到原对象。
解决方法

第一步:调整函数执行顺序

把删除全空列的操作放到填充空值操作之前,避免全空列被提前填充导致无法识别:

def test (df):
    drop_nan_columns(df)
    missing(df)
    return df

第二步:修正drop_nan_columns的错误写法

有两种可选修正方案:

方案1:保留inplace参数,删除多余赋值

去掉df = 的赋值操作,直接调用dropna方法即可,这是改动最小的修正方式:

def drop_nan_columns(df):
    df.dropna(axis = 1, how = "all", inplace = True)

方案2:移除inplace参数,返回修改后的对象

这种写法更符合Pandas官方的推荐规范,inplace参数因为存在较多隐性问题已经被官方标记为待废弃属性,新的Pandas版本中很多方法已经逐步取消inplace参数支持:
首先修改drop_nan_columns函数:

def drop_nan_columns(df):
    return df.dropna(axis = 1, how = "all")

再同步调整test函数的调用逻辑:

def test (df):
    df = drop_nan_columns(df)
    missing(df)
    return df

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:18:03