如何在数据集的numpy np.where条件中使用inplace=True参数
在np.where中正确处理fillna的inplace参数
你的代码存在核心问题:当fillna使用inplace=True时,这个方法会直接修改原DataFrame的列,并且返回None。把它放在np.where的第二个参数里,会导致符合Partner_working == "Yes"条件的行被赋值为None,完全达不到填充缺失值的目的。
正确用法分两种情况:
1. 推荐方式:不用inplace,直接用fillna的返回值
fillna默认(不带inplace=True)会返回填充后的新Series,刚好可以作为np.where的参数,逻辑清晰且不会意外修改原数据:
# 先计算中位数,避免重复计算提升效率 median_salary = df['Partner_salary'].median() df['Partner_salary'] = np.where( df['Partner_working'] == "Yes", df['Partner_salary'].fillna(median_salary), # 返回填充后的结果,作为赋值项 0 )
2. 若坚持用inplace(不推荐)
需要拆分逻辑:先单独填充符合条件的行,再用np.where设置其他行为0。注意这里即使加inplace=True,也需要针对筛选后的行操作,否则会修改整个列的缺失值:
median_salary = df['Partner_salary'].median() # 仅对符合条件的行填充缺失值,inplace修改原列 df.loc[df['Partner_working'] == "Yes", 'Partner_salary'].fillna(median_salary, inplace=True) # 再将不符合条件的行设为0 df['Partner_salary'] = np.where(df['Partner_working'] == "Yes", df['Partner_salary'], 0)
注意
inplace=True的操作会直接修改原数据,不利于代码的可维护性和调试,除非明确需要,否则优先选择第一种方式。
内容的提问来源于stack exchange,提问作者yashashri jawadekar Harshe
相关产品推荐
相关产品推荐

