Pandas数据清洗

简介: Pandas数据清洗

1.缺失值的检测与处理


1.1缺失值的检测与统计


(1)通过isnull()函数可以直接判断某列中的哪个数据为缺失值。


import numpy as np
import pandas as pd
string_data = pd.Series(['aardvark', 'artichoke', np.nan, 'avocado'])
print(string_data)
string_data.isnull()
#-----------------------------------------------------------------
0     aardvark
1    artichoke
2          NaN
3      avocado
0    False
1    False
2     True
3    False


(2)使用isnull().sun()统计缺失值。


df = pd.DataFrame(np.arange(12).reshape(3,4),columns = ['A','B','C','D'])
df.iloc[2,:] = np.nan
df[3] = np.nan
print(df)
df.isnull().sum()
#-----------------------------------------------------------------------
 A    B    C    D   3
0  0.0  1.0  2.0  3.0 NaN
1  4.0  5.0  6.0  7.0 NaN
2  NaN  NaN  NaN  NaN NaN
A    1
B    1
C    1
D    1
3    3


(3)使用info方法查看DataFrame的缺失值。


df.info()
#-------------
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 5 columns):
A    2 non-null float64
B    2 non-null float64
C    2 non-null float64
D    2 non-null float64
3    0 non-null float64
dtypes: float64(5)
memory usage: 248.0 bytes


1.2缺失值的处理


1.2.1删除缺失值


通过dropna方法可以删除具有缺失值的行
from numpy import nan as NA
data = pd.DataFrame([[1., 5.5, 3.], [1., NA, NA],[NA, NA, NA], 
[NA, 5.5, 3.]])
print(data)
cleaned = data.dropna()
print('删除缺失值后的:\n',cleaned)
#-------------------------------------
   0    1    2
0  1.0  5.5  3.0
1  1.0  NaN  NaN
2  NaN  NaN  NaN
3  NaN  5.5  3.0
删除缺失值后的:
   0    1    2
0  1.0  5.5  3.0


使用thresh参数,当传入thresh=N时,表示要求一行至少具有N个非NaN才能存在。


df = pd.DataFrame(np.random.randn(7, 3))
df.iloc[:4, 1] = NA
df.iloc[:2, 2] = NA
print(df)
df.dropna(thresh=2)
#----------------------------------------
    0         1         2
0 -0.506363       NaN       NaN
1  0.109888       NaN       NaN
2 -1.102190       NaN  0.399151
3  0.757800       NaN  1.170835
4  0.350187 -0.315094 -2.319175
5  0.056101  0.256769  0.438723
6 -0.128135 -0.141123 -0.945234
    0         1         2
2 -1.102190 NaN         0.399151
3 0.757800  NaN         1.170835
4 0.350187  -0.315094 -2.319175
5 0.056101  0.256769  0.438723
6 -0.128135 -0.141123 -0.945234


1.2.2填充缺失值


有时候直接删除缺失值并不是一个很好的方法,因此可以使用特定的值来对缺失值进行填充。pandas中替换缺失值的方法是fillna。


用插值方法填充


df = pd.DataFrame(np.random.randn(6, 3))
df.iloc[2:, 1] = NA
df.iloc[4:, 2] = NA
print(df)
df.fillna(method = 'ffill')
#-------------------------------------
     0         1         2
0  0.756464  0.443256 -0.658759
1  0.919615  0.492780  0.993361
2  1.362813       NaN -0.515228
3 -1.114843       NaN -0.622650
4  0.496363       NaN       NaN
5  0.647327       NaN       NaN
    0         1         2
0 0.756464  0.443256  -0.658759
1 0.919615  0.492780  0.993361
2 1.362813  0.492780  -0.515228
3 -1.114843 0.492780  -0.622650
4 0.496363  0.492780  -0.622650
5 0.647327  0.492780  -0.622650


用均值填充


df = pd.DataFrame(np.random.randn(4, 3))
df.iloc[2:, 1] = NA
df.iloc[3:, 2] = NA
print(df)
df[1] = df[1].fillna(df[1].mean())
print(df)
#--------------------------------------------
         0         1         2
0  0.209804 -0.308095  1.773856
1 -1.021306  2.082047 -0.396020
2  0.835592       NaN -1.363282
3 -1.253210       NaN       NaN
          0         1         2
0  0.209804 -0.308095  1.773856
1 -1.021306  2.082047 -0.396020
2  0.835592  0.886976 -1.363282
3 -1.253210  0.886976       NaN


2.重复值的检测与处理


使用duplicates方法判断各行是否有重复值


data = pd.DataFrame({ 'k1':['one','two'] * 3 + ['two'],'k2':[1, 1, 2, 3, 1, 4, 4] ,'k3':[1,1,5,2,1, 4, 4] })
print(data)
data.duplicated()
#-------------------------------
    k1  k2  k3
0  one   1   1
1  two   1   1
2  one   2   5
3  two   3   2
4  one   1   1
5  two   4   4
6  two   4   4
0    False
1    False
2    False
3    False
4     True
5    False
6     True

使用drop_duplicates删除重复的行


data.drop_duplicates()#每行各个字段都相同时去重
data.drop_duplicates(['k2','k3'])#指定部分列重复时去重
#--------------------------------------------------------
    k1  k2  k3
0 one 1 1
1 two 1 1
2 one 2 5
3 two 3 2
5 two 4 4
    k1  k2  k3
0 one 1 1
2 one 2 5
3 two 3 2
5 two 4 4


3.异常值检测与处理


异常值是指数据中存在的个别数值明显偏离其余数据的值。在数据统计方法中一般常用散点图,箱线图,3法则检测异常值。


3.1散点图方法


通过数据分布的散点图发现异常值。


import matplotlib.pyplot as plot
wdf = pd.DataFrame(np.arange(20),columns = ['W'])
wdf['Y'] = wdf['W']*1.5+2
wdf.iloc[3,1] = 128
wdf.iloc[18,1] = 150
wdf.plot(kind = 'scatter',x = 'W',y = 'Y

6c84a0e5ce899d40d5314af34397c36a_b13a786a11e14d679fb76fd7c7d8277b.png


3.2箱线图分析


箱线图使用最小值、下四分位数Q1、中位数Q2、上四分位数Q3、和最大值来描述数据。最大值和最小值分别为与四分位数值间距为1.5个IQR(IQR=Q3-Q1)的值。即min=Q1-1.5IQR,max=Q3+1.5IQR ,小于min和大于max 的值被认为是异常值。


import matplotlib.pyplot as plt
plt.boxplot(wdf['Y'].values,notch = True)

565ab682321ff587ef8547f616866684_1118a3769718441aa4ae0d6ec7cf8db5.png


3.3   3法则


若数据服从正态分布,则在 3原则下,异常值被定义为一组测定值中与平均值的偏差超过3倍标准差的值,因为在正态分布的假设下,距离平均值 3 之外的值出现的概率小于0.003,因此可以认为超出 3 之外的值为异常数据。


目录
相关文章
|
2月前
|
数据采集 机器学习/深度学习 Python
【机器学习】数据清洗——基于Pandas库的方法删除重复点
【机器学习】数据清洗——基于Pandas库的方法删除重复点
61 1
|
2月前
|
数据采集 Python
如何在Python中使用Pandas库进行数据清洗?
Pandas在Python中提供高效的数据清洗功能,包括处理缺失值(`dropna()`删除、`fillna()`填充)、重复值(`duplicated()`检查、`drop_duplicates()`删除)、异常值(条件筛选、分位数、标准差)和文本数据(字符串操作、正则表达式)。这些方法帮助用户根据需求清洗数据,确保数据质量。
29 0
|
1月前
|
数据采集 数据挖掘 大数据
数据处理利器:使用Pandas进行数据清洗与转换
【4月更文挑战第12天】在大数据时代,Pandas是Python数据分析的关键工具,提供高效的数据清洗和转换功能。本文介绍了如何使用Pandas处理缺失值(删除或填充)、异常值(Z-Score法和IQR法)以及重复值(检测和删除)。此外,还涵盖了数据转换,包括数据类型转换、数据标准化(Min-Max和Z-Score)以及类别数据的one-hot编码。通过学习这些方法,可以为数据分析和挖掘奠定坚实基础。
|
2月前
|
数据采集 Python
如何在Python中使用Pandas库进行数据清洗?
【2月更文挑战第27天】【2月更文挑战第98篇】如何在Python中使用Pandas库进行数据清洗?
|
7月前
|
数据采集 SQL 数据挖掘
【100天精通Python】Day56:Python 数据分析_Pandas数据清洗和处理(删除填充插值,数据类型转换,去重,连接与合并)
【100天精通Python】Day56:Python 数据分析_Pandas数据清洗和处理(删除填充插值,数据类型转换,去重,连接与合并)
69 0
|
8月前
|
数据采集 数据挖掘 数据处理
pandas数据清洗之处理缺失、重复、异常数据
在数据分析和建模的过程中,有相当多的时间要用在数据准备上:加载、清理、转换以及重塑。这些工作会占到分析师时间的80%或更多。幸运的是pandas和内置的Python标准库提供了高效、灵活的工具可以帮助我们轻松的做这些事情。 本文重点介绍通过pandas进行数据的清洗。数据处理中的清洗工作主要包括对需要分析的数据集中的缺失值(空值)、重复值、异常值的处理。
195 0
|
9月前
|
数据采集 数据挖掘 Python
【Pandas数据分析5】数据清洗
【Pandas数据分析5】数据清洗
77 0
|
11月前
|
数据采集 机器学习/深度学习 数据挖掘
使用Python进行数据清洗与预处理:Pandas和NumPy的应用
在数据分析和机器学习的过程中,数据清洗和预处理是非常重要的一步。Python提供了许多强大的库来帮助我们有效地进行数据清洗和预处理。本文将重点介绍两个常用的库:Pandas和NumPy。我们将使用一个实际的数据集来演示如何使用这两个库进行数据清洗和预处理,并展示其在数据分析中的应用。
253 0
|
数据采集 SQL 数据挖掘
超赞!两张小抄,带你 “迅速” 掌握Pandas “数据清洗” 流程!
超赞!两张小抄,带你 “迅速” 掌握Pandas “数据清洗” 流程!
超赞!两张小抄,带你 “迅速” 掌握Pandas “数据清洗” 流程!
|
数据采集 Python
用了的都说好 | 详解16个Pandas函数,让你的 “数据清洗” 能力提高100倍!(二)
用了的都说好 | 详解16个Pandas函数,让你的 “数据清洗” 能力提高100倍!(二)
用了的都说好 | 详解16个Pandas函数,让你的 “数据清洗” 能力提高100倍!(二)