【发布时间】:2020-03-01 00:49:11
【问题描述】:
我已经为此工作了一段时间,但似乎无法找到我需要的答案。假设我有一个如下的数据框。
我想做的是根据df['home_work'] 列中的值填充df['gender'] 的最后三行,特别是如果home_work > 9,则m,如果不是,则f。请记住,这只是一个编造的数据集,我保证不会冒犯任何人!
enr = pd.DataFrame({'name_id':[1254, 1359, 1254, 1296, 1353, 2656],
'enrollment_term':['spring 2018', 'spring 2018', 'fall 2018', 'spring 2018', 'spring 2018', 'fall 2020'],
'gpa_term': [2.93, np.nan, 1.65, 4.00, 3.95, 2.92],
'dog_owner':[0,1,1,1, 1, 0],
'salary':[50657, 90658, np.nan, 104352, np.nan, 102043],
'home_work':[34, np.nan, 12, 9, 8, 27],
'gender':['m','f','f',np.nan, np.nan, np.nan]})
enr
下面是我尝试的代码,但它在下面显示了错误:
for i in df['gender'].isna():
if df['home_work'][i] > 9:
df['gender'][i].fillna('m')
else:
df['gender'][i].fillna('f')
KeyError: False
任何帮助都会非常感谢,因为我已经为此工作了一段时间。我有一个 90K + 的数据集,我想调整这项工作,并想创建一个函数来简化这个过程但遇到了减速!
我遇到的问题是 np.nan 默认并填写 gender 的值,如果它不满足要求。想法?
#已编辑
假设我有以下df:
enr = pd.DataFrame({'name_id':[1254, 1359, 1254, 1296, 1353, 2656],
'enrollment_term':['spring 2018', 'spring 2018', 'fall 2018', 'spring 2018', 'spring 2018', 'fall 2020'],
'gpa_term': [2.93, np.nan, 1.65, 4.00, 3.95, 2.92],
'dog_owner':[0,1,1,1, 1, 0],
'salary':[50657, 90658, np.nan, 104352, np.nan, 102043],
'home_work':[np.nan, np.nan, 0.7, 0.3, 0.64, 0.49],
'gender':[0, 1, 1,np.nan, np.nan, np.nan]})
我想根据home_work 估算enr['gender']。如果enr['home_work'] >= 0.5,则enr['gender'] == 0,否则(只要enr['home_work'] != np.nan),enr['gender'] == 1。
我不想要的是在enr[gender] 中估算值,而他们的enr['home_work'] 是np.nan我尝试了许多不同的技术,但似乎都估算为 1. 想法?
【问题讨论】: