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 之外的值为异常数据。


目录
相关文章
|
7月前
|
数据采集 机器学习/深度学习 Python
【机器学习】数据清洗——基于Pandas库的方法删除重复点
【机器学习】数据清洗——基于Pandas库的方法删除重复点
277 1
|
7月前
|
数据采集 Python
如何在Python中使用Pandas库进行数据清洗?
Pandas在Python中提供高效的数据清洗功能,包括处理缺失值(`dropna()`删除、`fillna()`填充)、重复值(`duplicated()`检查、`drop_duplicates()`删除)、异常值(条件筛选、分位数、标准差)和文本数据(字符串操作、正则表达式)。这些方法帮助用户根据需求清洗数据,确保数据质量。
75 0
|
7月前
|
数据采集 Python
如何在Python中使用Pandas库进行数据清洗?
【4月更文挑战第21天】Pandas在Python中用于数据清洗,包括处理缺失值(`dropna()`删除、`fillna()`填充)、处理重复值(`duplicated()`检查、`drop_duplicates()`删除)、处理异常值(条件筛选、分位数、标准差)和文本数据(字符串操作、正则表达式)。示例代码展示了各种方法的用法。
103 3
|
1月前
|
数据采集 数据挖掘 数据处理
如何使用 Pandas 库进行数据清洗和预处理?
数据清洗和预处理是数据分析中至关重要的步骤,Pandas库提供了丰富的函数和方法来完成这些任务
64 8
|
1月前
|
数据采集 Python
Pandas 常用函数-数据清洗
Pandas 常用函数-数据清洗
20 2
|
1月前
|
数据采集 数据挖掘 数据格式
Pandas 数据清洗
10月更文挑战第27天
46 0
Pandas 数据清洗
|
2月前
|
数据采集 数据可视化 数据挖掘
Python 数据分析实战:使用 Pandas 进行数据清洗与可视化
【10月更文挑战第3天】Python 数据分析实战:使用 Pandas 进行数据清洗与可视化
137 0
|
7月前
|
数据采集 数据挖掘 大数据
数据处理利器:使用Pandas进行数据清洗与转换
【4月更文挑战第12天】在大数据时代,Pandas是Python数据分析的关键工具,提供高效的数据清洗和转换功能。本文介绍了如何使用Pandas处理缺失值(删除或填充)、异常值(Z-Score法和IQR法)以及重复值(检测和删除)。此外,还涵盖了数据转换,包括数据类型转换、数据标准化(Min-Max和Z-Score)以及类别数据的one-hot编码。通过学习这些方法,可以为数据分析和挖掘奠定坚实基础。
197 0
|
6月前
|
数据采集 存储 数据可视化
Pandas高级教程:数据清洗、转换与分析
Pandas是Python的数据分析库,提供Series和DataFrame数据结构及数据分析工具,便于数据清洗、转换和分析。本教程涵盖Pandas在数据清洗(如缺失值、重复值和异常值处理)、转换(数据类型转换和重塑)和分析(如描述性统计、分组聚合和可视化)的应用。通过学习Pandas,用户能更高效地处理和理解数据,为数据分析任务打下基础。
768 3
|
7月前
|
数据采集 数据挖掘 Serverless
利用Python和Pandas库优化数据清洗流程
在数据分析项目中,数据清洗是至关重要的一步。传统的数据清洗方法往往繁琐且易出错。本文将介绍如何利用Python编程语言中的Pandas库,通过其强大的数据处理能力,实现高效、自动化的数据清洗流程。我们将探讨Pandas库在数据清洗中的应用,包括缺失值处理、重复值识别、数据类型转换等,并通过一个实际案例展示如何利用Pandas优化数据清洗流程,提升数据质量。