【发布时间】:2018-08-28 18:53:21
【问题描述】:
这里是 Python 新手。我希望我的问题不是完全多余的——如果是,请告诉我并将其归咎于我对 StackOverflow 的缺乏经验。
无论如何,我正在使用来自 kaggle.com 的 Titanic 数据集,并且我希望使用一组条件语句来替换整个数据框 Age 列中的 NaN“值”。最终,我想根据以下条件生成结果: 1)如果age==NaN,并且Title==(X or Y or Z),生成一个0-18范围内的随机数 2)如果age==NaN,并且Title==(A or B or C),生成19-80范围内的随机数
注意:'Title' 是列有个人标题的列(即先生、夫人、勋爵等)
我发现了类似的情况here,但我无法根据我的情况调整它,因为它根本不具备条件性。
这是我最近的尝试(根据本次更新的回复)
尝试 1
import random
mask_young = (df.Age.isnull()) & (df.Title.isin(Title_Young))
df.loc[mask_young, 'Age'] = df.loc[mask_young, 'Age'].apply(lambda x: np.random.randint(0,18))
mask_old = (df.Age.isnull()) & (df.Title.isin(Title_Old))
df.loc[mask_old, 'Age'] = df.loc[mask_old, 'Age'].apply(lambda x: np.random.randint(18,65))
mask_all = (df.Age.isnull()) & (df.Title.isin(Title_All))
df.loc[mask_all, 'Age'] = df.loc[mask_all, 'Age'].apply(lambda x: np.random.randint(0,65))
结果没有错误,但没有更正 'Age' 列中的 NaN 值
【问题讨论】:
-
你的第一次尝试是遍历一个字符串,我想你的意思是
for age in df['Age']:。但更重要的是,当使用 pandas 时,这种情况下不需要循环。 -
感谢您的提示,@pshep123。我已经考虑到了这一点(参见上面编辑过的代码),但是,它没有提供预期的结果。
标签: python python-3.x pandas dataframe conditional