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

  • 什么是异常值
  • 超出或低于正常范围的值
  • 异常值的检测方式
  • 根据给定的数据范围进行判断,不在范围内的数据视为异常值
  • 均方差
  • 箱形图
  • 异常值的处理方式
  • 删除
  • 当缺失值处理
  • 当特殊情况进行分析
目录
相关文章
|
1月前
|
数据采集 数据挖掘 数据处理
如何使用 Pandas 库进行数据清洗和预处理?
数据清洗和预处理是数据分析中至关重要的步骤,Pandas库提供了丰富的函数和方法来完成这些任务
66 8
|
3天前
|
数据采集 分布式计算 大数据
Pandas数据清洗:缺失值处理
本文详细介绍了Pandas库中处理缺失值的方法,包括检测缺失值、删除缺失值、填充缺失值和插值法填充缺失值。通过基础概念和代码示例,帮助读者理解和解决数据清洗中常见的缺失值问题。
115 80
|
1月前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
75 0
|
1月前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
42 2
|
1月前
|
数据采集 Python
Pandas 常用函数-数据清洗
Pandas 常用函数-数据清洗
22 2
|
1月前
|
数据采集 数据挖掘 数据格式
Pandas 数据清洗
10月更文挑战第27天
46 0
Pandas 数据清洗
|
1月前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
45 2
|
1月前
|
数据采集 数据可视化 数据挖掘
Python数据分析:Pandas库实战指南
Python数据分析:Pandas库实战指南
|
1月前
|
并行计算 数据挖掘 大数据
Python数据分析实战:利用Pandas处理大数据集
Python数据分析实战:利用Pandas处理大数据集
|
1月前
|
数据采集 数据可视化 数据挖掘
利用Python进行数据分析:Pandas库实战指南
利用Python进行数据分析:Pandas库实战指南
下一篇
DataWorks