数据清理

学习目标:

1、熟悉常见数据问题的处理方式

2、掌握对缺失值的检测与处理

3、掌握重复值的检测与处理

数据清理主要是通过一定的检测与处理方法,将”脏”数据清理成质量较高的”干净”数据,使数据具有完整性、唯一性、权威性、合法性和一致性等特点。常遇到的数据问题有三种—数据缺失、数据重复、数据异常,它们分别是由数据中存在缺失值、重复值、异常值引起的。

1.1、缺失值的处理方式

缺失值是指样本数据中某个或某些属性的值是不全的,主要是由于机器故障、人为因素等导致部分数据未能收集。缺失值主要有三种处理方式:删除、填充和插补。

删除缺失值是通过直接删除包含缺失值的行和列来达到目的,适用于删除缺失值后只产生较小的偏差,但并不是十分有效。

填充和插补缺失值均使用指定的值来填充缺失值,避免了因某个属性而放弃大量其他属性值的情况,适用于数量较大的样本数据。

1.2重复值的处理方式

重复值是指样本数据中某个数据记录完全相同,主要是由于人工录入,机器故障等导致部分数据重复录入,主要有两种方式,即删除重复值和保留重复值。其中删除重复值是比较常见的方式,其目的在于保留唯一的数据。

2.1、缺失值的检测

pandas中None或NaN代表缺失值。检测缺失值的常用方法包括isnull()、notnull()、isna()和notna()。

方法说明isnull()若返回的值为True,说明存在缺失值notnull()若返回的值为False,说明存在缺失值isna()若返回的值为True,说明存在缺失值notna()若返回的值为False,说明存在缺失值

创建一个DataFrame类对象,以isna()和notna()方法为例

import pandas as pd
import numpy as np
na_df=pd.DataFrame({'A':[1,2,np.NaN,4],
                   'B':[3,4,4,5],
                   'C':[5,6,7,8],
                   'D':[7,5,np.NaN,np.NaN]})
na_df
#使用isna()方法检测na_df中是否存在缺失值
na_df.isna()
#True中对应着缺失值的位置

。接上例,notna()方法与isna()方法返回的结果完全相反

na_df.notna()
#返回False对应着缺失值

2.2、缺失值的处理

2.2.1、删除缺失值

pandas中提供了删除缺失值的方法dropna()。dropna()方法用于删除缺失值所在的一行或一行数据,并返回一个删除缺失值后的新对象。语法格式如下:

DataFrame.dropna(axis=0,how='any',thresh=None,subset=None,inplace=False)

使用dropna()方法删除na_df对象中缺失值所在的一行对象

#删除缺失值,删除的是缺失值的一整行数据
na_df.dropna()

保留至少三个非NaN值的行

na_df.dropna(thresh=3)

2.2.2、填充缺失值

pandas中提供了填充缺失值的方法fillna()。fillna()方法既可以使用指定的数据填充,也可以使用缺失值前面或后面的数据填充,语法格式如下:

DataFrame.fillna(value=None,method=None,axis=None,inplace=False,limit=None,downcast=None)

使用fillna()方法将na_df对象中的缺失值填充为缺失值所在列的平均值

#填充缺失值
a=np.around(np.mean(na_df['A']),1)
b=np.around(np.mean(na_df['D']),1)
na_df.fillna({'A':a,'D':b})

使用fillna()方法将na_df对象中的缺失值填充为缺失值前面的值

na_df.fillna(method='ffill')

2.2.3、插补缺失值

pandas中提供了插补缺失值的方法interpolate().格式如下:

DataFrame.interpolate(method='linear',axis=0,limit=None,inplace=False,limit_direction=None,limit_area=None,downcast=None,**kwargs)

使用interpolate()方法结合线性插值法对na_df对象中的缺失值进行插补

na_df.interpolate(method='linear')

3.1、重复值的检测

pandas中使用duplicated()方法检测数据中的重复值。语法格式如下:

DataFrame.duplicated(subset=None,keep='first')

先创建一个包含重复值的DataFrame类对象person

person=pd.DataFrame({'name':['刘婷','张三','李四','王浩','李华','张静'],
                    'age':[24,23,25,33,33,22],
                    'height':[163,176,178,176,178,164],
                    'gender':['女','男','男','男','男','女']
                    })
print(person)

检测person对象中的重复值

person.duplicated()

3.2、重复值的处理

重复值的一般处理方式是删除。pandas中使用drop_duplicates()方法删除重复值。

DataFrame.drop_duplicates(subset=None,keep='first',inplace=False,ignore_index=False)

使用drop_duplicates()方法保留person对象中第一次出现的重复值,删除第二次出现的重复值。

person.drop_duplicates()

Original: https://blog.csdn.net/weixin_64664352/article/details/127496756
Author: 独角兽没有角 _352
Title: 数据清理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/678630/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球