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

基于条件替换泰坦尼克号数据集Age列的NaN值(Python新手求助)

嘿,作为Python新手完全不用纠结重复提问的事儿——大家刚接触StackOverflow的时候都得摸索一阵!针对你用Kaggle泰坦尼克号数据集处理Age列NaN值的需求,我给你整理了具体的实现方案:

泰坦尼克号数据集Age列NaN值条件填充方案

核心实现思路

我们可以借助pandas的条件索引和numpy的随机数生成工具,精准匹配不同条件来填充缺失值,分步骤处理如下:

1. 处理Title为X/Y/Z且Age为空的情况

首先定位符合条件的行,然后生成0-18范围内的随机数进行填充:

import pandas as pd
import numpy as np

# 加载你的泰坦尼克号数据集(替换成实际路径或Kaggle的加载方式)
df = pd.read_csv('/kaggle/input/titanic/train.csv')

# 定义匹配条件:Age为NaN,且Title属于X/Y/Z
target_condition = df['Age'].isna() & df['Title'].isin(['X', 'Y', 'Z'])

# 生成对应数量的0-18随机整数(要浮点数就换成np.random.uniform(0,18, size=...))
fill_values = np.random.randint(low=0, high=19, size=target_condition.sum())

# 填充缺失值
df.loc[target_condition, 'Age'] = fill_values

2. 扩展其他条件的处理(针对你提到的“……”部分)

如果还有其他填充规则(比如不同Title对应不同年龄范围),可以用同样的逻辑扩展:
比如假设需要给Title为A/B/C且Age为空的行填充19-60的随机数:

another_condition = df['Age'].isna() & df['Title'].isin(['A', 'B', 'C'])
another_fill_values = np.random.randint(low=19, high=61, size=another_condition.sum())
df.loc[another_condition, 'Age'] = another_fill_values

额外小提示

  • 如果你还没从Name字段提取Title(通常泰坦尼克号数据集中Title藏在Name里,比如Mr、Mrs、Miss),可以用这段代码快速提取:
    # 从Name字段中提取头衔(正则匹配格式为" 头衔."的内容)
    df['Title'] = df['Name'].str.extract(' ([A-Za-z]+)\.', expand=False)
    
  • 填充完成后,可以用df['Age'].isna().sum()检查是否还有未处理的缺失值,确保所有规则都覆盖到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:51:52