使用特定列在scikit-learn中估算分类缺失值

时间:2019-12-03 07:12:41

标签: python python-3.x pandas scikit-learn

我为患者设置了数据集,我想处理这些数据的缺失值,它包含数字和文本,这是我想根据受试者ID处理的想法。不仅基于列替换 数据集看起来像这样

 subject_id     time      heart_rate      blood_pressure    urine_color 
   1             1.10          23              60                red
   1              2                            40                
   2             3             60              80              
   2             4                                            dark yellow 

我想用最常见的患者数据替换文本数据,并用患者的平均值替换数字,就像这样

 subject_id     time      heart_rate      blood_pressure    urine_color 
   1             1.10          23              60                red
   1              2            23              40                red
   2             3             60              80              dark yellow 
   2             4             60              80              dark yellow

任何人都可以帮助解决这一问题,我会搜索所有估算方法,在列中使用频率最高,或者对整个列进行统计分析

1 个答案:

答案 0 :(得分:0)

GroupBy.transform与具有数字列的mean的自定义功能一起使用,并将mode用于分类的列,并用DataFrame.fillna替换缺少的值:

f = lambda x: x.mean() if np.issubdtype(x.dtype, np.number) else x.mode().iat[0]

每组类别列的所有NaN值(如果可能):

f = lambda x: x.mean() if np.issubdtype(x.dtype, np.number) else next(iter(x.mode()), None)

cols = df.columns.difference(['subject_id'])
df[cols] = df[cols].fillna(df.groupby('subject_id')[cols].transform(f))
print (df)
   subject_id time  heart_rate  blood_pressure  urine_color
0           1  1.1          23              60          red
1           1    2          23              40          red
2           2    3          60              80  dark yellow
3           2    4          60              80  dark yellow