• pandas数据缺失处理


    一 前言

    数据分析中对数据的清洗是个比较重要的工作,如果处理不当会造成数据分析错误,故学习好相关数据清洗知识很有必要。知识追寻者忙于学习其它知识,有点懈怠了python, 努力补救中。

    公众号:知识追寻者

    知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;)

    二 数据缺失处理

    数据缺失处理也就是对NaN的处理,通常的做法就是省略或者替换;

    2.1 空值判定

    调用isnull() 方法进行空值判定,返回布尔值;

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    import numpy as np
    
    ser = pd.Series(['111','222',np.NaN])
    # 空判定
    print(ser.isnull())
    

    输出

    0    False
    1    False
    2     True
    dtype: bool
    

    2.2丢弃NaN

    对于有些数据存在NaN,一般进行数据分析时都是不需要的数据,故会省略掉;使用 ser.dropna() 方法可以略过所有的NaN数据

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    import numpy as np
    
    ser = pd.Series(['111','222',np.NaN])
    # 过滤掉所有NAN
    print(ser.dropna())
    

    输出

    0    111
    1    222
    dtype: object
    

    如果想删除整列全为NaN的可以指定参数how= 'all'

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    import numpy as np
    
    data = pd.DataFrame([[2.5, 5, 3], [1, np.NaN, np.NaN], [np.NaN, np.NaN, np.NaN]])
    # 过滤掉都是NaN的列
    print(data.dropna(how='all'))
    

    输出

         0    1    2
    0  2.5  5.0  3.0
    1  1.0  NaN  NaN
    

    可以指定按列丢弃 axis = 1

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    import numpy as np
    
    data = pd.DataFrame([[2.5, 5, 3], [1, np.NaN, np.NaN], [np.NaN, np.NaN, np.NaN]])
    # 按列丢弃
    print(data.dropna(axis=1,how='all'))
    

    输出

         0    1    2
    0  2.5  5.0  3.0
    1  1.0  NaN  NaN
    2  NaN  NaN  NaN
    

    2.3 数据填充

    另一种手段对NaN的处理可以设置为默认值,比如 数值0;

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    import numpy as np
    
    data = pd.DataFrame([[2.5, 5, 3], [1, np.NaN, np.NaN], [np.NaN, np.NaN, np.NaN]])
    # 填充
    print(data.fillna(0))
    

    输出

         0    1    2
    0  2.5  5.0  3.0
    1  1.0  0.0  0.0
    2  0.0  0.0  0.0
    

    对每个列设置默认值替换NaN可以使用字典

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    import numpy as np
    
    data = pd.DataFrame([[2.5, 5, 3], [1, np.NaN, np.NaN], [np.NaN, np.NaN, np.NaN]])
    dic = {0:1, 1:2, 2:3}
    # 填充
    print(data.fillna(dic))
    

    输出

         0    1    2
    0  2.5  5.0  3.0
    1  1.0  2.0  3.0
    2  1.0  2.0  3.0
    

    再复习一下填充,之前文章有到过;此时会对每列最后一个值进行填充NaN,并且使用limit 限定填充次数

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    import numpy as np
    
    data = pd.DataFrame([[2.5, 5, 3], [1, np.NaN, np.NaN], [np.NaN, np.NaN, np.NaN]])
    # 填充
    print(data.fillna(method='ffill', limit=1))
    

    输出

         0    1    2
    0  2.5  5.0  3.0
    1  1.0  5.0  3.0
    2  1.0  NaN  NaN
    
  • 相关阅读:
    代码检查工具介绍
    Eclipse利用代理快速安装插件
    toString结果
    Eclipse查看jdk源码
    java语言基础特性
    TODO、FIXME和XXX转载
    java泛型
    不良代码总结
    mockServer学习
    akka
  • 原文地址:https://www.cnblogs.com/zszxz/p/12843086.html
Copyright © 2020-2023  润新知