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

  • 什么是异常值
  • 超出或低于正常范围的值
  • 异常值的检测方式
  • 根据给定的数据范围进行判断,不在范围内的数据视为异常值
  • 均方差
  • 箱形图
  • 异常值的处理方式
  • 删除
  • 当缺失值处理
  • 当特殊情况进行分析
目录
相关文章
|
12月前
|
自然语言处理 数据挖掘 数据处理
告别低效代码:用对这10个Pandas方法让数据分析效率翻倍
本文将介绍 10 个在数据处理中至关重要的 Pandas 技术模式。这些模式能够显著减少调试时间,提升代码的可维护性,并构建更加清晰的数据处理流水线。
369 3
告别低效代码:用对这10个Pandas方法让数据分析效率翻倍
|
数据采集 数据可视化 数据挖掘
Pandas数据应用:天气数据分析
本文介绍如何使用 Pandas 进行天气数据分析。Pandas 是一个强大的 Python 数据处理库,适合处理表格型数据。文章涵盖加载天气数据、处理缺失值、转换数据类型、时间序列分析(如滚动平均和重采样)等内容,并解决常见报错如 SettingWithCopyWarning、KeyError 和 TypeError。通过这些方法,帮助用户更好地进行气候趋势预测和决策。
532 71
|
数据采集 数据挖掘 数据处理
如何使用 Pandas 库进行数据清洗和预处理?
数据清洗和预处理是数据分析中至关重要的步骤,Pandas库提供了丰富的函数和方法来完成这些任务
1032 64
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
472 0
|
数据采集 分布式计算 大数据
Pandas数据清洗:缺失值处理
本文详细介绍了Pandas库中处理缺失值的方法,包括检测缺失值、删除缺失值、填充缺失值和插值法填充缺失值。通过基础概念和代码示例,帮助读者理解和解决数据清洗中常见的缺失值问题。
1306 80
|
存储 数据采集 数据可视化
Pandas数据应用:电子商务数据分析
本文介绍如何使用 Pandas 进行电子商务数据分析,涵盖数据加载、清洗、预处理、分析与可视化。通过 `read_csv` 等函数加载数据,利用 `info()` 和 `describe()` 探索数据结构和统计信息。针对常见问题如缺失值、重复记录、异常值等,提供解决方案,如 `dropna()`、`drop_duplicates()` 和正则表达式处理。结合 Matplotlib 等库实现数据可视化,探讨内存不足和性能瓶颈的应对方法,并总结常见报错及解决策略,帮助提升电商企业的数据分析能力。
824 73
|
存储 数据采集 数据可视化
Pandas数据应用:医疗数据分析
Pandas是Python中强大的数据操作和分析库,广泛应用于医疗数据分析。本文介绍了使用Pandas进行医疗数据分析的常见问题及解决方案,涵盖数据导入、预处理、清洗、转换、可视化等方面。通过解决文件路径错误、编码不匹配、缺失值处理、异常值识别、分类变量编码等问题,结合Matplotlib等工具实现数据可视化,并提供了解决常见报错的方法。掌握这些技巧可以提高医疗数据分析的效率和准确性。
657 22
|
数据采集 数据可视化 索引
Pandas数据应用:股票数据分析
本文介绍了如何使用Pandas库进行股票数据分析。首先,通过pip安装并导入Pandas库。接着,从本地CSV文件读取股票数据,并解决常见的解析错误。然后,利用head()、info()等函数查看数据基本信息,进行数据清洗,处理缺失值和重复数据。再者,结合Matplotlib和Seaborn进行数据可视化,绘制收盘价折线图。最后,进行时间序列分析,设置日期索引、重采样和计算移动平均线。通过这些步骤,帮助读者掌握Pandas在股票数据分析中的应用。
978 5
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
560 2
|
数据采集 Python
Pandas 常用函数-数据清洗
Pandas 常用函数-数据清洗
220 2

热门文章

最新文章