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

Python自定义DataFrame删列+dropna过滤函数写法及调用问题

DataFrame通用过滤函数问题解答

1. 符合需求的通用函数实现

你之前写的函数存在三个核心问题:

  • 把列删除、缺失值删除两个操作的axis参数绑定为同一个变量,无法适配两个操作参数独立配置的需求,实际上删除列的操作axis固定为1,不需要额外暴露参数调整
  • 对传入的列名参数做了固定列表包裹,既不兼容多列列表输入,也没有做不存在列的容错,很容易触发“列未找到”的报错
  • 调用dropna()时没有将返回结果重新赋值,pandas默认不做原地修改,这行代码的处理结果根本不会生效

正确实现的代码如下:

import pandas as pd

def filtered_df(data, drop_cols, dropna_axis=0, ignore_missing_cols=True):
    # 兼容单个列名字符串、多列列表两种输入格式
    if isinstance(drop_cols, str):
        drop_cols = [drop_cols]
    # 执行删列操作,通过errors参数配置是否忽略不存在的列
    processed_df = data.drop(
        columns=drop_cols,
        axis=1,
        errors="ignore" if ignore_missing_cols else "raise"
    )
    # 执行缺失值过滤,重新赋值保证操作生效
    processed_df = processed_df.dropna(axis=dropna_axis)
    return processed_df

对应你之前两个业务场景的调用方式:

# 处理gross数据集,删除genre、rating、total_gross三列,默认按行过滤缺失值
total_adj_gross = filtered_df(gross, drop_cols=['genre','rating', 'total_gross'])

# 处理characters数据集,删除hero、song两列,显式指定按行过滤缺失值
vill = filtered_df(characters, drop_cols=['hero','song'], dropna_axis=0)

默认开启的ignore_missing_cols=True参数会自动跳过传入列名里不存在于DataFrame的字段,不会触发列不存在的报错;如果需要严格校验列名正确性,把该参数设为False即可,和pandas原生drop方法的报错行为一致。

2. 自定义函数的调用规则

自定义函数不需要必须保存为.py脚本才能调用。
测试阶段你可以直接把函数定义代码写在当前的运行环境中——不管是Jupyter Notebook单元格、VS Code/PyCharm的交互控制台,还是普通.py脚本的开头位置,只要先运行完函数定义的代码段,后续代码就可以直接调用该函数,和调用pandas等第三方库的内置函数没有区别。
只有当你需要跨不同脚本、跨不同notebook文件复用这个函数的时候,才需要把函数单独存为.py文件,通过import语法导入使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 12:18:18