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

简介: 【Pandas数据分析5】数据清洗

五、数据清洗

源数据:

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、异常值的检测与处理

  • 什么是异常值
  • 超出或低于正常范围的值
  • 异常值的检测方式
  • 根据给定的数据范围进行判断,不在范围内的数据视为异常值
  • 均方差
  • 箱形图
  • 异常值的处理方式
  • 删除
  • 当缺失值处理
  • 当特殊情况进行分析
目录
相关文章
|
4天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
19 0
|
2月前
|
数据采集 数据挖掘 数据处理
使用Python和Pandas进行数据分析基础
使用Python和Pandas进行数据分析基础
55 5
|
1天前
|
数据采集 数据挖掘 数据格式
Pandas 数据清洗
10月更文挑战第27天
7 0
Pandas 数据清洗
|
5天前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
17 1
|
26天前
|
机器学习/深度学习 数据采集 算法
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
【10月更文挑战第5天】随着数据科学和机器学习领域的快速发展,处理大规模数据集的能力变得至关重要。Python凭借其强大的生态系统,尤其是NumPy、Pandas和SciPy等库的支持,在这个领域占据了重要地位。本文将深入探讨这些库如何帮助科学家和工程师高效地进行数据分析,并通过实际案例来展示它们的一些高级应用。
42 0
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
|
1月前
|
数据采集 数据挖掘 API
Python数据分析加速器:深度挖掘Pandas与NumPy的高级功能
在Python数据分析的世界里,Pandas和NumPy无疑是两颗璀璨的明星,它们为数据科学家和工程师提供了强大而灵活的工具集,用于处理、分析和探索数据。今天,我们将一起深入探索这两个库的高级功能,看看它们如何成为数据分析的加速器。
37 1
|
2月前
|
数据挖掘 Python
Pandas实战(1):电商购物用户行为数据分析
Pandas实战(1):电商购物用户行为数据分析
75 1
|
2月前
|
数据挖掘 Python
Pandas实战(3):电商购物用户行为数据分析
Pandas实战(3):电商购物用户行为数据分析
96 1
|
2月前
|
数据挖掘 Python
Pandas实战(2):电商购物用户行为数据分析
Pandas实战(2):电商购物用户行为数据分析
55 1
|
2月前
|
数据采集 数据挖掘 数据处理
小白一文学会Pandas:数据分析的瑞士军刀
小白一文学会Pandas:数据分析的瑞士军刀
36 1