五、数据清洗
源数据:
import pandas as pd pd.set_option('display.unicode.east_asian_width', True) df = pd.read_excel('../data/马士兵课程记录.xlsx') print(df) print('---------------------------------------------------------------')
买家会员名 买家实际支付金额 课程总数量 课程标题 类别 订单付款时间 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、查看缺失值
使用DataFrame对象的info()
方法
print(df.info())
<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
2、判断数据是否存在缺失值
使用DataFrame的isnull()
方法和notnull()
方法
print(df.isnull()) print('---------------------------------------------------------------') print(df.notnull())
买家会员名 买家实际支付金额 课程总数量 课程标题 类别 订单付款时间 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
3、缺失值的处理方式
- 不处理
- 删除
- 删除所有NaN
df = df.dropna() print(df)
买家会员名 买家实际支付金额 课程总数量 课程标题 类别 订单付款时间 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
- 提取其中不为NaN 或 删除指定NaN
df = df[df['课程总数量'].notnull()] print(df)
买家会员名 买家实际支付金额 课程总数量 课程标题 类别 订单付款时间 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
- 填充或替换
df['课程总数量'] = df['课程总数量'].fillna(0) print(df)
买家会员名 买家实际支付金额 课程总数量 课程标题 类别 订单付款时间 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
- 插值(均值、中位数、众数等填补)
4、重复值处理
- 判断是否具有重复值
print(df.duplicated())
0 False 1 False 2 False 3 False 4 False 5 False 6 False 7 False 8 False 9 False 10 True dtype: bool
- 去除重复数据
df = df.drop_duplicates() print(df)
买家会员名 买家实际支付金额 课程总数量 课程标题 类别 订单付款时间 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
- 去除指定列的重复数据,保留后一个
df = df.drop_duplicates(['买家实际支付金额'], keep='last') print(df)
买家会员名 买家实际支付金额 课程总数量 课程标题 类别 订单付款时间 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
- 直接删除,保留一个副本
new_df = df.drop_duplicates(['买家实际支付金额'], inplace=False) print(new_df) # 修改后 print('-----------------------------------------------------------------------------------') print(df) # 原数据
买家会员名 买家实际支付金额 课程总数量 课程标题 类别 订单付款时间 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
5、异常值的检测与处理
- 什么是异常值
- 超出或低于正常范围的值
- 异常值的检测方式
- 根据给定的数据范围进行判断,不在范围内的数据视为异常值
- 均方差
- 箱形图
- 异常值的处理方式
- 删除
- 当缺失值处理
- 当特殊情况进行分析