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

如何重构年龄插补代码:用函数提升可读性与代码质量

代码重构:优化泰坦尼克号数据集年龄缺失值填充逻辑

原始代码通过多层嵌套循环处理年龄缺失值,可读性与可维护性较差。以下是通过函数封装、Pandas原生特性优化后的版本,实现相同功能的同时大幅提升代码清晰度:

import numpy as np
import pandas as pd

def load_data(train_path: str, test_path: str) -> tuple[pd.DataFrame, pd.DataFrame]:
    """加载训练集与测试集数据"""
    train_df = pd.read_csv(train_path)
    test_df = pd.read_csv(test_path)
    return train_df, test_df

def fill_missing_ages(df: pd.DataFrame) -> pd.DataFrame:
    """按Sex和Pclass分组填充缺失Age值:取分组中位数并调整为0.5的倍数"""
    # 计算每个(Sex, Pclass)分组的年龄中位数
    age_group_medians = df.groupby(['Sex', 'Pclass'])['Age'].median()
    # 将中位数调整为最近的0.5倍数(与原始逻辑一致)
    adjusted_medians = age_group_medians.apply(lambda x: int(x / 0.5 + 0.5) * 0.5)
    
    # 填充缺失值:匹配对应分组的调整后中位数
    df['Age'] = df.apply(
        lambda row: adjusted_medians.loc[(row['Sex'], row['Pclass'])] 
        if pd.isnull(row['Age']) else row['Age'],
        axis=1
    )
    
    # 转换为整数类型
    df['Age'] = df['Age'].astype(int)
    return df

# 主执行逻辑
train_df, test_df = load_data("train_df.csv", "test_df.csv")
combine = [train_df, test_df]

for df in combine:
    fill_missing_ages(df)

优化亮点

  • 职责拆分:将数据加载、缺失值填充拆分为独立函数,单一职责便于复用与测试
  • 消除嵌套循环:用groupby替代多层循环,直接按Sex+Pclass分组计算,逻辑更直观
  • 可读性增强:添加函数文档字符串、清晰的变量命名,代码意图一目了然
  • Pandas原生实现:利用apply+loc完成缺失值匹配填充,符合Pandas惯用写法,减少手动索引出错概率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:32:59