alo*_*ran 3 python conditional dataframe python-3.x pandas
这里是Python的新手。我希望我的问题不是完全多余的-如果是的话,请让我知道并总结一下我对StackOverflow的经验不足。
无论如何,我正在使用kaggle.com上的Titanic数据集,并且希望在整个数据框的Age列中使用一组条件语句来替换NaN'值'。最终,我想根据以下条件生成结果:1)如果age == NaN,并且Title ==(X或Y或Z),则生成0-18范围内的随机数2)如果age = = NaN,并且Title ==(A或B或C),生成19-80范围内的随机数
注意:“标题”是一列标题,其中列出了个人名称(例如,先生,夫人,领主等)
我在这里发现了类似的情况,但由于它根本没有达到条件性,因此我无法使其适应我的情况。
这是我最近的尝试(根据此更新的回复)
尝试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))
Run Code Online (Sandbox Code Playgroud)
结果没有错误,但没有对“年龄”列中的NaN值进行校正
您要屏蔽DataFrame,然后仅对符合条件的DataFrame部分执行操作。
import numpy as np
import pandas as pd
mask1 = (df.Age.isnull()) & (df.Title == 'Master')
df.loc[mask1, 'Age'] = df.loc[mask1, 'Age'].apply(lambda x: np.random.randint(0,18))
Run Code Online (Sandbox Code Playgroud)
如果您确实需要在列表中包含多个标题的功能,则可以通过定义您关心的标题列表然后使用来实现isin
。例如:
list1 = ['Master', 'Sir', 'Mr']
mask1 = (df.Age.isnull()) & (df.Title.isin(list1))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
701 次 |
最近记录: |