如何基于另一分类列填充DataFrame中的NaN值?
分条件填充DataFrame中的NaN值
完整解决方案代码
import pandas as pd import numpy as np # 示例数据 data = pd.DataFrame({ 'Partner_working': ['Yes','No','Yes','Yes','No'], 'Partner_salary': [np.NaN,np.NaN,1500,1000,0] }) # 1. 给Partner_working为'No'的NaN薪资填0 data.loc[(data['Partner_working'] == 'No') & data['Partner_salary'].isna(), 'Partner_salary'] = 0 # 2. 用剩余薪资的均值填充剩下的NaN salary_avg = data['Partner_salary'].mean() data['Partner_salary'] = data['Partner_salary'].fillna(salary_avg) print(data)
步骤拆解
- 第一步用
loc同时过滤两个条件:Partner_working等于'No',且Partner_salary是空值,直接把这些位置的薪资设为0。你之前的代码已经能统计到这类空值的数量,现在只需要在切片后加上赋值操作就行。 - 第二步先计算当前列的均值(此时No对应的空值已经被填成0,均值会包含这些有效数据),再用
fillna把剩下的空值(也就是Yes对应的那些)替换成均值。
运行结果
Partner_working Partner_salary 0 Yes 1166.666667 1 No 0.000000 2 Yes 1500.000000 3 Yes 1000.000000 4 No 0.000000
内容的提问来源于stack exchange,提问作者pravin panda
相关产品推荐
相关产品推荐

