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

如何自动化pandas DataFrame数据清洗并解决fillna相关报错问题?

错误原因说明

  1. ValueError:函数中执行df['Fare'].fillna()时未传入提前计算好的均值参数,fillna方法缺少必填的填充值/方法参数触发报错。
  2. SettingWithCopyWarning:传入函数的DataFrame是其他数据对象的切片视图,直接在原视图上赋值触发pandas的副本修改预警,防止数据误改。

修复后的基础版本

直接修正原有函数的两个问题即可正常运行:

def data_cleaning(df):
    # 先创建数据副本,避免修改原切片触发警告
    res_df = df.copy()
    # 按pandas推荐的loc方式赋值
    res_df.loc[:, 'Age'] = res_df['Age'].fillna(0)
    fare_mean = res_df['Fare'].mean()
    res_df.loc[:, 'Fare'] = res_df['Fare'].fillna(fare_mean)
    return res_df

调用方式和原有逻辑一致:

train_data = data_cleaning(train_data)

高扩展性通用清洗方案

如果后续需要适配更多列、不同填充规则的需求,可以用下面的通用函数,不需要修改函数内部,仅通过参数配置即可完成不同填充逻辑:

def general_data_cleaning(df, fill_config):
    """
    通用缺失值填充函数
    fill_config:填充规则字典,key为列名,value支持固定填充值/内置规则,内置规则可选'mean'(均值)、'median'(中位数)、'mode'(众数)
    """
    res_df = df.copy()
    for col, rule in fill_config.items():
        # 根据规则计算填充值
        if rule == 'mean':
            fill_val = res_df[col].mean()
        elif rule == 'median':
            fill_val = res_df[col].median()
        elif rule == 'mode':
            fill_val = res_df[col].mode()[0]
        else:
            fill_val = rule
        # 执行填充
        res_df.loc[:, col] = res_df[col].fillna(fill_val)
    return res_df

调用示例:

# 配置填充规则,后续新增列直接在该字典中添加配置即可
fill_config = {
    'Age': 0,
    'Fare': 'mean'
}
train_data = general_data_cleaning(train_data, fill_config)
cross_val_data = general_data_cleaning(cross_val_data, fill_config)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:18:01