• 【Pandas数据分析5】数据清洗


    五、数据清洗

    源数据:

    import pandas as pd
    
    pd.set_option('display.unicode.east_asian_width', True)
    
    df = pd.read_excel('../data/马士兵课程记录.xlsx')
    print(df)
    print('---------------------------------------------------------------')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
       买家会员名  买家实际支付金额  课程总数量              课程标题  类别 订单付款时间
    0      msb001          30960.00         2.0  Java互联网高级架构师  课程   2020-10-09
    1      msb002              1.00         1.0    金三银四面试突击班   NaN   2020-10-09
    2      msb003           9980.00         1.0    GoLang从入门到精通  课程   2020-01-19
    3      msb004           9980.00         NaN  算法与数据结构进阶班  课程   2020-06-30
    4      msb005              9.90         1.0       大前端VIP体验营   NaN   2020-03-23
    5      msb006              0.02         1.0  零基础速成班HTML+CSS  课程   2020-03-24
    6      msb007           2400.00         1.0              操作系统  课程   2020-03-25
    7      msb008              1.00         NaN            自定义注解  课程   2020-03-26
    8      msb009           2980.00         1.0        多线程与高并发  课程   2020-03-27
    9      msb010           1980.00         1.0              科技英语  课程   2020-03-28
    10     msb010           1980.00         1.0              科技英语  课程   2020-03-28
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    1、查看缺失值

    使用DataFrame对象的info()方法

    print(df.info())
    
    • 1
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 11 entries, 0 to 10
    Data columns (total 6 columns):
     #   Column    Non-Null Count  Dtype         
    ---  ------    --------------  -----         
     0   买家会员名     11 non-null     object        
     1   买家实际支付金额  11 non-null     float64       
     2   课程总数量     9 non-null      float64       
     3   课程标题      11 non-null     object        
     4   类别        9 non-null      object        
     5   订单付款时间    11 non-null     datetime64[ns]
    dtypes: datetime64[ns](1), float64(2), object(3)
    memory usage: 656.0+ bytes
    None
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    2、判断数据是否存在缺失值

    使用DataFrame的isnull()方法和notnull()方法

    print(df.isnull())
    print('---------------------------------------------------------------')
    print(df.notnull())
    
    • 1
    • 2
    • 3
        买家会员名  买家实际支付金额  课程总数量  课程标题   类别  订单付款时间
    0        False             False       False     False  False         False
    1        False             False       False     False   True         False
    2        False             False       False     False  False         False
    3        False             False        True     False  False         False
    4        False             False       False     False   True         False
    5        False             False       False     False  False         False
    6        False             False       False     False  False         False
    7        False             False        True     False  False         False
    8        False             False       False     False  False         False
    9        False             False       False     False  False         False
    10       False             False       False     False  False         False
    ---------------------------------------------------------------
        买家会员名  买家实际支付金额  课程总数量  课程标题   类别  订单付款时间
    0         True              True        True      True   True          True
    1         True              True        True      True  False          True
    2         True              True        True      True   True          True
    3         True              True       False      True   True          True
    4         True              True        True      True  False          True
    5         True              True        True      True   True          True
    6         True              True        True      True   True          True
    7         True              True       False      True   True          True
    8         True              True        True      True   True          True
    9         True              True        True      True   True          True
    10        True              True        True      True   True          True
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    3、缺失值的处理方式

    • 不处理

    • 删除

      • 删除所有NaN
      df = df.dropna()
      print(df)
      
      • 1
      • 2
         买家会员名  买家实际支付金额  课程总数量              课程标题  类别 订单付款时间
      0      msb001          30960.00         2.0  Java互联网高级架构师  课程   2020-10-09
      2      msb003           9980.00         1.0    GoLang从入门到精通  课程   2020-01-19
      5      msb006              0.02         1.0  零基础速成班HTML+CSS  课程   2020-03-24
      6      msb007           2400.00         1.0              操作系统  课程   2020-03-25
      8      msb009           2980.00         1.0        多线程与高并发  课程   2020-03-27
      9      msb010           1980.00         1.0              科技英语  课程   2020-03-28
      10     msb010           1980.00         1.0              科技英语  课程   2020-03-28
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 提取其中不为NaN 或 删除指定NaN
      df = df[df['课程总数量'].notnull()]
      print(df)
      
      • 1
      • 2
         买家会员名  买家实际支付金额  课程总数量              课程标题  类别 订单付款时间
      0      msb001          30960.00         2.0  Java互联网高级架构师  课程   2020-10-09
      1      msb002              1.00         1.0    金三银四面试突击班   NaN   2020-10-09
      2      msb003           9980.00         1.0    GoLang从入门到精通  课程   2020-01-19
      4      msb005              9.90         1.0       大前端VIP体验营   NaN   2020-03-23
      5      msb006              0.02         1.0  零基础速成班HTML+CSS  课程   2020-03-24
      6      msb007           2400.00         1.0              操作系统  课程   2020-03-25
      8      msb009           2980.00         1.0        多线程与高并发  课程   2020-03-27
      9      msb010           1980.00         1.0              科技英语  课程   2020-03-28
      10     msb010           1980.00         1.0              科技英语  课程   2020-03-28
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
    • 填充或替换

    df['课程总数量'] = df['课程总数量'].fillna(0)
    print(df)
    
    • 1
    • 2
       买家会员名  买家实际支付金额  课程总数量              课程标题  类别 订单付款时间
    0      msb001          30960.00         2.0  Java互联网高级架构师  课程   2020-10-09
    1      msb002              1.00         1.0    金三银四面试突击班   NaN   2020-10-09
    2      msb003           9980.00         1.0    GoLang从入门到精通  课程   2020-01-19
    3      msb004           9980.00         0.0  算法与数据结构进阶班  课程   2020-06-30
    4      msb005              9.90         1.0       大前端VIP体验营   NaN   2020-03-23
    5      msb006              0.02         1.0  零基础速成班HTML+CSS  课程   2020-03-24
    6      msb007           2400.00         1.0              操作系统  课程   2020-03-25
    7      msb008              1.00         0.0            自定义注解  课程   2020-03-26
    8      msb009           2980.00         1.0        多线程与高并发  课程   2020-03-27
    9      msb010           1980.00         1.0              科技英语  课程   2020-03-28
    10     msb010           1980.00         1.0              科技英语  课程   2020-03-28
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 插值(均值、中位数、众数等填补)

    4、重复值处理

    • 判断是否具有重复值
    print(df.duplicated())
    
    • 1
    0     False
    1     False
    2     False
    3     False
    4     False
    5     False
    6     False
    7     False
    8     False
    9     False
    10     True
    dtype: bool
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 去除重复数据
    df = df.drop_duplicates()
    print(df)
    
    • 1
    • 2
      买家会员名  买家实际支付金额  课程总数量              课程标题  类别 订单付款时间
    0     msb001          30960.00         2.0  Java互联网高级架构师  课程   2020-10-09
    1     msb002              1.00         1.0    金三银四面试突击班   NaN   2020-10-09
    2     msb003           9980.00         1.0    GoLang从入门到精通  课程   2020-01-19
    3     msb004           9980.00         NaN  算法与数据结构进阶班  课程   2020-06-30
    4     msb005              9.90         1.0       大前端VIP体验营   NaN   2020-03-23
    5     msb006              0.02         1.0  零基础速成班HTML+CSS  课程   2020-03-24
    6     msb007           2400.00         1.0              操作系统  课程   2020-03-25
    7     msb008              1.00         NaN            自定义注解  课程   2020-03-26
    8     msb009           2980.00         1.0        多线程与高并发  课程   2020-03-27
    9     msb010           1980.00         1.0              科技英语  课程   2020-03-28
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 去除指定列的重复数据,保留后一个
    df = df.drop_duplicates(['买家实际支付金额'], keep='last')
    print(df)
    
    • 1
    • 2
       买家会员名  买家实际支付金额  课程总数量              课程标题  类别 订单付款时间
    0      msb001          30960.00         2.0  Java互联网高级架构师  课程   2020-10-09
    3      msb004           9980.00         NaN  算法与数据结构进阶班  课程   2020-06-30
    4      msb005              9.90         1.0       大前端VIP体验营   NaN   2020-03-23
    5      msb006              0.02         1.0  零基础速成班HTML+CSS  课程   2020-03-24
    6      msb007           2400.00         1.0              操作系统  课程   2020-03-25
    7      msb008              1.00         NaN            自定义注解  课程   2020-03-26
    8      msb009           2980.00         1.0        多线程与高并发  课程   2020-03-27
    10     msb010           1980.00         1.0              科技英语  课程   2020-03-28
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 直接删除,保留一个副本
    new_df = df.drop_duplicates(['买家实际支付金额'], inplace=False)
    print(new_df)  # 修改后
    print('-----------------------------------------------------------------------------------')
    print(df)  # 原数据
    
    • 1
    • 2
    • 3
    • 4
      买家会员名  买家实际支付金额  课程总数量              课程标题  类别 订单付款时间
    0     msb001          30960.00         2.0  Java互联网高级架构师  课程   2020-10-09
    1     msb002              1.00         1.0    金三银四面试突击班   NaN   2020-10-09
    2     msb003           9980.00         1.0    GoLang从入门到精通  课程   2020-01-19
    4     msb005              9.90         1.0       大前端VIP体验营   NaN   2020-03-23
    5     msb006              0.02         1.0  零基础速成班HTML+CSS  课程   2020-03-24
    6     msb007           2400.00         1.0              操作系统  课程   2020-03-25
    8     msb009           2980.00         1.0        多线程与高并发  课程   2020-03-27
    9     msb010           1980.00         1.0              科技英语  课程   2020-03-28
    -----------------------------------------------------------------------------------
       买家会员名  买家实际支付金额  课程总数量              课程标题  类别 订单付款时间
    0      msb001          30960.00         2.0  Java互联网高级架构师  课程   2020-10-09
    1      msb002              1.00         1.0    金三银四面试突击班   NaN   2020-10-09
    2      msb003           9980.00         1.0    GoLang从入门到精通  课程   2020-01-19
    3      msb004           9980.00         NaN  算法与数据结构进阶班  课程   2020-06-30
    4      msb005              9.90         1.0       大前端VIP体验营   NaN   2020-03-23
    5      msb006              0.02         1.0  零基础速成班HTML+CSS  课程   2020-03-24
    6      msb007           2400.00         1.0              操作系统  课程   2020-03-25
    7      msb008              1.00         NaN            自定义注解  课程   2020-03-26
    8      msb009           2980.00         1.0        多线程与高并发  课程   2020-03-27
    9      msb010           1980.00         1.0              科技英语  课程   2020-03-28
    10     msb010           1980.00         1.0              科技英语  课程   2020-03-28
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    5、异常值的检测与处理

    • 什么是异常值
      • 超出或低于正常范围的值
    • 异常值的检测方式
      • 根据给定的数据范围进行判断,不在范围内的数据视为异常值
      • 均方差
      • 箱形图
    • 异常值的处理方式
      • 删除
      • 当缺失值处理
      • 当特殊情况进行分析
  • 相关阅读:
    计算机网络-IS-IS工作原理之邻接关系建立
    Python&C++相互混合调用编程全面实战-31完成扩展库中打开ffmpeg解码器
    c++基础知识-数据类型(详解)
    2022年10月 前端面试题总结——(二)
    AI变现之Gpts搞流量+赚钱
    JSP页面中page指令有哪些属性及方法可使用呢?
    2024全球数字电影摄像机、相机、广播摄像机市场报告
    使用浏览功能
    cs231n--深度学习训练方法
    selenium中webdriver常用的ChromeOptions参数
  • 原文地址:https://blog.csdn.net/m0_70885101/article/details/127191521