基于条件替换泰坦尼克号数据集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
相关产品推荐
相关产品推荐

