五、数据清洗
源数据:
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、异常值的检测与处理
- 什么是异常值
- 超出或低于正常范围的值
- 异常值的检测方式
- 根据给定的数据范围进行判断,不在范围内的数据视为异常值
- 均方差
- 箱形图
- 异常值的处理方式
- 删除
- 当缺失值处理
- 当特殊情况进行分析