问题描述
我有一个dataframe( train
),其中有一个Age
列。
该列缺少值。
我已经将它与另一个static_values
合并了,其中也有一个Age
列。
我使用以下几行替换train
df中“ Age
列的缺失值。
predicted_vals = pd.merge(static_vals, train, on=['Pclass','Sex'])
# num of missing values
predicted_vals.loc[predicted_vals['Age_y'].isna(),'Age_y'].isna().sum() # 177
predicted_vals.loc[predicted_vals['Age_y'].isna(),'Age_y'] = predicted_vals.loc[predicted_vals['Age_y'].isna(),'Age_x']
在运行完上述行之后,我运行以下命令以查看值是否已被替换-
predicted_vals.loc[predicted_vals['Age_y'].isna(),'Age_y']
这就是我得到的putput-
Series([], Name: Age_x, dtype: float64)
它是空的。
没有作业发生。
奇怪的是,当我在运行上述行后检查Age_x
列的值时,那里也有空白。
>>> predicted_vals.loc[predicted_vals['Age_y'].isna(),'Age_x']
Series([], Name: Age_x, dtype: float64)
下面是在我尝试分配缺失值的行之前,该列所保留的内容
>>> predicted_vals.loc[predicted_vals['Age_y'].isna(),'Age_x'].head()
3 34.240964
8 34.240964
15 34.240964
25 34.240964
34 34.240964
我在这里搜索了类似的问题,但所有问题都涉及为多个行分配单个值。 我不明白这里出了什么问题。 有什么帮助吗?
1楼
这里真的有问题吗?
predicted_vals.loc[predicted_vals['Age_y'].isna(),'Age_y']
应该为空,因为您已经填充了值!
尝试predicted_vals.loc[~predicted_vals['Age_y'].isna(),'Age_y']
2楼
这是一种替代解决方案,它避免合并和处理列名后缀。
我们对齐两个索引,并使用fillna
从static_vals
进行映射。
predicted_vals = predicted_vals.set_index(['Pclass','Sex'])
predicted_vals['Age'] = predicted_vals['Age'].fillna(static_vals.set_index(['Pclass','Sex'])['Age'])
predicted_vals = predicted_vals.reset_index()
如果您想进行显式合并,则是道。
3楼
我认为您需要 :
predicted_vals['Age_y'] = predicted_vals['Age_y'].combine_first(predicted_vals['Age_x'])