如何选择是删除NaN值还是用数据集中的均值(或中位数)填充?还有什么其他技术可以清理数据集中的缺失值? 让数据为数字。(在python中)
答案 0 :(得分:1)
它始终取决于您的数据集和缺失值的百分比。
对于一小部分缺失值,删除NaN
值是可接受的解决方案。如果百分比不可忽略,则强烈建议不要放弃NaN
。
然后填充类型取决于数据类型。如果您的缺失值应该在已知的小范围内,那么您可以填写其他值的平均值。例如,如果您的数据集包含学校中学生的年龄(但缺少许多这些值),则平均值不应对某些分析产生问题。
另一方面,如果您有一系列增加的测量时间很慢,您可以考虑用向前或向后填充替换NaN
值。
例如,在下面的情况中,df.fillna(method='ffill')
应该优于df.fillna(df.mean())
:
A
01-01-2018 00:00 0.1
01-01-2018 00:01 0.1
01-01-2018 00:02 NaN
01-01-2018 00:03 0.1
01-01-2018 00:04 0.2
01-01-2018 00:05 0.2
但在另一个例子中,用平均值替换会更好:
Age Class
StudentA 15.3 10
StudentB 16.1 10
StudentC 15.5 9
StudentD NaN 10
StudentE 16.0 10
同样,没有一般规则,但这取决于您的数据集和您必须进行的分析。
答案 1 :(得分:0)
处理缺失数据没有具体规则。但是,您可能需要考虑以下事项:
test['A'].fillna(test.groupby('Group')['A'].transform('mean'), inplace=True)
test
A B Group
0 1.000000 1 c
1 2.000000 4 d
2 5.666667 5 d
3 3.000000 7 c
4 4.000000 12 d
5 7.000000 45 c
6 11.000000 6 d
class Parcel(models.Model):
name = models.CharField(max_length=NAME_MAX_LENGTH)
garden = models.ForeignKey(Garden, on_delete=models.CASCADE)
def __str__(self):
return self.name
class Bed(models.Model):
parcel = models.ForeignKey(Parcel, on_delete=models.CASCADE)
name = models.CharField(max_length=NAME_MAX_LENGTH)
length = models.IntegerField()
width = models.IntegerField()
希望这有帮助。