【问题标题】:Dealing with missing values in dataset in python在python中处理数据集中的缺失值
【发布时间】:2018-11-07 17:27:42
【问题描述】:

如何选择是删除 NaN 值还是用数据集中的平均值(或中位数)填充它?还有什么其他技术可以清除数据集中的缺失值? 让数据为数字。(在python中)

【问题讨论】:

标签: python pandas data-cleaning


【解决方案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

同样,没有一般规则,但这取决于您的数据集和您必须进行的分析。

【讨论】:

  • 但是如果缺失值完全不相关怎么办?考虑 Titanic 数据集中“客舱”列中的 NaN 值。您希望如何填写?
  • 如果NaN 完全不相关,您可以决定填写任何数字,甚至删除整列。尤其是如果你在做一些机器学习练习,你不需要所有的列。
【解决方案2】:

没有处理缺失数据的具体规则。但是,您可能需要考虑以下几点:

1。如果某列的数据有超过 70% 的缺失值,您可能需要删除该列。

2。如果列数据的分布本质上是对称的,您可以考虑将缺失值替换为均值:

test = pd.DataFrame({'A': [1, 2, np.nan, 3, 4, 7, 11], 'B': [1, 4, 5, 7, 12, 45, 6], 'Group':['c', 'd', 'd', 'c', 'd', 'c', 'd']})

test
    A       B   Group
0   1.0     1   c
1   2.0     4   d
2   NaN     5   d
3   3.0     7   c
4   4.0     12  d
5   7.0     45  c
6   11.0    6   d

test['A'].fillna(test['A'].mean(), inplace=True)

test
    A           B   Group
0   1.000000    1   c
1   2.000000    4   d
2   4.666667    5   d
3   3.000000    7   c
4   4.000000    12  d
5   7.000000    45  c
6   11.000000   6   d

或者您可以对数据进行分组并使用分组平均值:

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

3。如果该列的数据有偏差,您可以考虑使用中值来填充缺失值。 (将上述命令中的 'mean' 替换为 'median')。

4。或者,您也可以查看无监督方法,例如聚类。在这里,一旦您的数据被聚类,您就可以使用聚类的众数或平均值并相应地替换您的缺失数据。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-06
    • 2019-05-25
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 2016-07-04
    • 2014-04-27
    • 2022-07-06
    相关资源
    最近更新 更多