例如,我有一个如下的DataFrame。
lineNum id name Cname score
1 001 Jack Math 99
2 002 Jack English 110
3 003 Jack Chinese 90
4 003 Jack Chinese 90
5 004 Tom Math Nan
6 005 Tom English 75
7 006 Tom Chinese 85
如您所见,我想对该数据进行数据清理。
1)删除第3行和第4行的重复值。
2)处理不合理的价值。在第2行中,杰克的英语获得了110分,这超过了最大值100。我想将他的分数设置为所有学生的英语分数的平均值。
3)处理楠值。汤姆的数学成绩是Nan。我想更改为所有学生的数学成绩的平均值。
我可以分别满足所有要求。但是我不知道如何满足所有这三个要求。谢谢!
最佳答案
计划
我删除重复开始。
使用mask
得分> 100 null
筛选新数据框并按均值分组
映射均值并使用它来填充空值
d = df.drop_duplicates(['id', 'name', 'Cname'])
s0 = d.score
s1 = s0.mask(s > 100)
m = s1.mask(s1 > 100).notnull()
d.assign(score=s1.fillna(d.Cname.map(d[m].groupby('Cname').score.mean())))
lineNum id name Cname score
0 1 1 Jack Math 99.0
1 2 2 Jack English 110.0
2 3 3 Jack Chinese 90.0
4 5 4 Tom Math 99.0
5 6 5 Tom English 75.0
6 7 6 Tom Chinese 85.0
关于python - 如何在 Pandas 中进行复杂的数据清理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43382838/