pandas数据清洗之处理缺失、重复、异常数据

简介: 在数据分析和建模的过程中,有相当多的时间要用在数据准备上:加载、清理、转换以及重塑。这些工作会占到分析师时间的80%或更多。幸运的是pandas和内置的Python标准库提供了高效、灵活的工具可以帮助我们轻松的做这些事情。本文重点介绍通过pandas进行数据的清洗。数据处理中的清洗工作主要包括对需要分析的数据集中的缺失值(空值)、重复值、异常值的处理。

在数据分析和建模的过程中,有相当多的时间要用在数据准备上:加载、清理、转换以及重塑。这些工作会占到分析师时间的80%或更多。幸运的是pandas和内置的Python标准库提供了高效、灵活的工具可以帮助我们轻松的做这些事情。

本文重点介绍通过pandas进行数据的清洗。数据处理中的清洗工作主要包括对需要分析的数据集中的缺失值(空值)、重复值、异常值的处理。对于数据清洗一般也是分两个步骤,第一步就是要很方便快速的找到需要处理的数据,如何快速找到数据中的缺失值(空值)、重复数据或异常的数据,第二步是对找到的数据根据自己的实际使用需求进行处理,如删除还是替换成其他的数据。
pandas数据清洗

一、处理缺失值

在许多数据分析工作过程中,由于对数据质量问题,缺失数据是经常发生的。对于数值数据,pandas使用浮点值NaN(Not a Number)表示缺失数据。在pandas中,还采用了R语言中惯用的缺失值表示法NA,它表示不可用not available。在统计应用中,NA数据可能是不存在的数据或虽然存在但是看不到。进行数据清洗对缺失数据进行分析,以判断数据采集的问题或缺失数据导致的偏差。

1、判断缺失值(空值)

在pandas中通过isna()或isnull()方法判断空值,二者等价,用于判断一个series或dataframe各元素值是否为空的bool结果。需注意对空值的界定:即None或numpy.nan才算空值,而空字符串、空列表等则不属于空值;类似地,notna()和notnull()则用于判断是否非空。
看下实例:

import pandas as pd
import numpy as np
stud_data=pd.Series(['张三','李四',np.nan,[],'',None,'王五'])
stud_data

通过stud_data.isnull()和stud_data.isna()分别来判断空值
判断空值

类似地,notna()和notnull()则用于判断是否非空
判断是否非空
同样的对于DataFrame中的缺失数据判断也是一样的。
构建DataFrame

stud_df=pd.DataFrame(stud_data,columns=['student_name'])
stud_df

DataFrame中的缺失数据判断

对于缺失值的处理有两种常用的方式,一是用按一定的策略对空值进行填充,二是对于缺失值干脆进行删除。

2、填充缺失值(空值)

pandas中用户填充缺失值的方法是fillna(),可以按一定的策略对空值进行填充,如常数填充、向前/向后填充等,也可通过inplace参数确定是否本地更改。

1.常量填充

stud_df[['student_name']].fillna('某某')

常量填充

可以看到判断为缺失值的地方都填充了"某某",因为空字符串和空列表都不是缺失值,所以没有填充。

2.向前和向后填充NA

通过fillna(mathod='ffill'),mathod='ffill' 向前填充和 mathod='bfill' 向后填充,也就是说用前面的值来填充NA或用后面的值来填充NA
我们来增加一列性别列gender来看一下。

stud_gender_data=pd.Series([1,0,np.nan,'女',1,None,'男'])
stud_df['gender']=stud_gender_data
stud_df
stud_df[['gender']].fillna(method='ffill')

向前和向后填充NA

可以看到通过method='ffill',将NaN和None前面的值填充端到了NaN和None。
用fillna()进行填充会返回一个填充好的数据集的副本,并没有对原始数据进行操作,如果要修改原始数据可以通过inplace参数确定是否本地更改。
通过inplace参数确定是否本地更改

3、删除缺失值(空值)

如果想删除缺失值,那么使用 dropna() 函数与参数 axis 可以实现。在默认情况下,按照 axis=0 来按行处理,这意味着如果某一行中存在 NaN 值将会删除整行数据。如果在dropna()中传入how='all'将只会删除全为NA或NaN的行。示例如下:
删除缺失值(空值)

二、处理重复值

重复数据也是在实际数据处理过程中碰到比较多的,处理重复数据就是在数据集中找出重复数据然后将其删除保留一个唯一不重复的数据。

1、检测重复值

pandas通过duplicated()方法检测各行是否重复,返回一个行索引的bool结果,可通过keep参数设置保留第一行、最后一行、无保留,例如keep=first意味着在存在重复的多行时,首行被认为是合法的而可以保留。
构造一个DataFrame来看一个实例:

data=pd.DataFrame({
   
   'key1':['A','B']*3+['B'],'key2':[1,1,2,3,3,4,4]})
data
data.duplicated()

检测重复值

2、删除重复值

pandas通过drop_duplicates()方法按行检测并删除重复的记录,也可通过keep参数设置保留项。由于该方法默认是按行进行检测,如果存在某个需要需要按列删除,则可以先转置再执行该方法。

data.drop_duplicates()

删除重复值
可以看到第7行也就是index为6的重复行被删除了。
当带了keep='last'参数时,保留最后一个重复项,前面的重复项将被丢弃。可以看到保留的是索引为6的,索引为5的重复项被丢弃了。
保留最后一个重复项

三、处理异常值

1、判断异常值

判断异常值的标准依赖具体分析数据,如大于或小于某个基线范围的值。
我们来看一个含有正态分布的DataFrame数据集

data=pd.DataFrame(np.random.randn(1000,4))
data.describe()

含有正态分布的DataFrame数据集

假设我们认为某列中绝对值大小超过3的是异常值,那么判断异常值就是要找出某列中大小超过3的值。

data[np.abs(col)>3]

找出某列中大小超过3的值

要选出全部含有绝对值大小超过3的行,可以在布尔型DataFrame中使用any()方法。

data[(np.abs(data)>3).any(1)]

全部含有绝对值大小超过3的行

2、替换异常值

对于异常值,可以直接替换。
如:

data[np.abs(data)>3]=np.sign(data)*3

这样就可以将异常值替换为绝对值不大于3的
替换异常值

3、删除异常值

删除异常值,可以用pandas的drop()方法,接受参数在特定轴线执行删除一条或多条记录,可通过axis参数设置是按行删除还是按列删除
如删除第3列,列索引为2的列中绝对值>3的行

col=data[2]
data.drop(data[np.abs(col)>3].index,inplace=True)

删除异常值

可以看到本来有1000行的,删除了3行,再用data[np.abs(col)>3]验证,已经找不到数据了。

至此,本文通过实例介绍了pandas进行数据清洗包括缺失值、重复值及异常值的处理。数据清洗是数据分析前面的准备工作,数据质量的好坏将直接影响数据分析的结果。


作者博客:http://xiejava.ishareread.com/

目录
相关文章
|
4月前
|
数据采集 安全 数据挖掘
Pandas数据合并:10种高效连接技巧与常见问题
在数据分析中,数据合并是常见且关键的步骤。本文针对合并来自多个来源的数据集时可能遇到的问题,如列丢失、重复记录等,提供系统解决方案。基于对超1000个复杂数据集的分析经验,总结了10种关键技术,涵盖Pandas库中`merge`和`join`函数的使用方法。内容包括基本合并、左连接、右连接、外连接、基于索引连接、多键合并、数据拼接、交叉连接、后缀管理和合并验证等场景。通过实际案例与技术原理解析,帮助用户高效准确地完成数据整合任务,提升数据分析效率。
401 13
Pandas数据合并:10种高效连接技巧与常见问题
|
7月前
|
监控 物联网 数据处理
Pandas高级数据处理:数据流式计算
本文介绍了如何使用 Pandas 进行流式数据处理。流式计算能够实时处理不断流入的数据,适用于金融交易、物联网监控等场景。Pandas 虽然主要用于批处理,但通过分块读取文件、增量更新 DataFrame 和使用生成器等方式,也能实现简单的流式计算。文章还详细讨论了内存溢出、数据类型不一致、数据丢失或重复及性能瓶颈等常见问题的解决方案,并建议在处理大规模数据时使用专门的流式计算框架。
469 100
Pandas高级数据处理:数据流式计算
|
8月前
|
数据采集 存储 供应链
Pandas数据应用:库存管理
本文介绍Pandas在库存管理中的应用,涵盖数据读取、清洗、查询及常见报错的解决方法。通过具体代码示例,讲解如何处理多样数据来源、格式不一致、缺失值和重复数据等问题,并解决KeyError、ValueError等常见错误,帮助提高库存管理效率和准确性。
259 72
|
7月前
|
数据采集 数据可视化 数据处理
Pandas高级数据处理:数据仪表板制作
《Pandas高级数据处理:数据仪表板制作》涵盖数据清洗、聚合、时间序列处理等技巧,解决常见错误如KeyError和内存溢出。通过多源数据整合、动态数据透视及可视化准备,结合性能优化与最佳实践,助你构建响应快速、数据精准的商业级数据仪表板。适合希望提升数据分析能力的开发者。
172 31
|
7月前
|
缓存 数据可视化 BI
Pandas高级数据处理:数据仪表板制作
在数据分析中,面对庞大、多维度的数据集(如销售记录、用户行为日志),直接查看原始数据难以快速抓住重点。传统展示方式(如Excel表格)缺乏交互性和动态性,影响决策效率。为此,我们利用Python的Pandas库构建数据仪表板,具备数据聚合筛选、可视化图表生成和性能优化功能,帮助业务人员直观分析不同品类商品销量分布、省份销售额排名及日均订单量变化趋势,提升数据洞察力与决策效率。
130 12
|
7月前
|
消息中间件 数据挖掘 数据处理
Pandas高级数据处理:数据流式计算
在大数据时代,Pandas作为Python强大的数据分析库,在处理结构化数据方面表现出色。然而,面对海量数据时,如何实现高效的流式计算成为关键。本文探讨了Pandas在流式计算中的常见问题与挑战,如内存限制、性能瓶颈和数据一致性,并提供了详细的解决方案,包括使用`chunksize`分批读取、向量化操作及`dask`库等方法,帮助读者更好地应对大规模数据处理需求。
156 17
|
7月前
|
数据采集 存储 数据可视化
Pandas高级数据处理:数据报告生成
Pandas 是数据分析领域不可或缺的工具,支持多种文件格式的数据读取与写入、数据清洗、筛选与过滤。本文从基础到高级,介绍如何使用 Pandas 进行数据处理,并解决常见问题和报错,如数据类型不一致、时间格式解析错误、内存不足等。最后,通过数据汇总、可视化和报告导出,生成专业的数据报告,帮助你在实际工作中更加高效地处理数据。
193 8
|
7月前
|
数据采集 并行计算 数据可视化
Pandas高级数据处理:数据报告生成实战指南
数据报告生成面临数据质量、计算性能、呈现形式和自动化等核心挑战。常见问题包括缺失值导致统计失真、内存溢出及可视化困难。解决方案涵盖数据清洗、分块处理、安全绘图模板等。通过模块化设计、异常处理机制和性能优化策略,如使用`category`类型、并行计算等,可大幅提升效率。最佳实践建议建立数据质量检查清单、版本控制和自动化测试框架,确保系统具备自适应能力,提升报告生成效率300%以上。
161 12
|
8月前
|
数据采集 供应链 数据可视化
Pandas数据应用:供应链优化
在当今全球化的商业环境中,供应链管理日益复杂。Pandas作为Python的强大数据分析库,能有效处理库存、物流和生产计划中的大量数据。本文介绍如何用Pandas优化供应链,涵盖数据导入、清洗、类型转换、分析与可视化,并探讨常见问题及解决方案,帮助读者在供应链项目中更加得心应手。
161 21
|
8月前
|
机器学习/深度学习 搜索推荐 数据挖掘
Pandas数据应用:广告效果评估
在数字化营销中,广告效果评估至关重要。Pandas作为Python的强大数据分析库,在处理广告数据时表现出色。本文介绍如何使用Pandas进行广告效果评估,涵盖数据读取、预览、缺失值处理、数据类型转换及常见报错解决方法,并通过代码案例详细解释。掌握这些技能,可为深入分析广告效果打下坚实基础。
147 17