欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

数据清洗与预处理-Python实现

程序员文章站 2022-05-04 12:30:06
首先讲一下数据清洗与预处理的定义在百度百科中的定义是 - 数据清洗是指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。与问卷审核不同,录入后的数据清理一般是由计算机而不是人工完成。我自己理解的是,在我们不管是机器学习建模还是进行数据分析或者数据挖掘操作,我们首先都需要对数据进行预处理。我们拿到手的初始数据往往会存在缺失值、重复值、异常值或者错误值,影响实验结果,我们就需要进行数据清洗。或者是想要保持数据的一致性,也可以数据清洗。有时数据的原始变量不满足分析的要求...

这个Python版本必须是3.7的

首先讲一下数据清洗与预处理的定义

在百度百科中的定义是 - 数据清洗是指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。与问卷审核不同,录入后的数据清理一般是由计算机而不是人工完成。

我自己理解的是,在我们不管是机器学习建模还是进行数据分析或者数据挖掘操作,我们首先都需要对数据进行预处理。我们拿到手的初始数据往往会存在缺失值、重复值、异常值或者错误值,影响实验结果,我们就需要进行数据清洗。或者是想要保持数据的一致性,也可以数据清洗。有时数据的原始变量不满足分析的要求,我们需要先对数据进行一定的处理,也就是数据的预处理。

数据清洗与预处理的目的是提高数据的质量,提高实验结果的可靠度。

连接数据库

import numpy as np
from pandas import DataFrame
import pandas as pd
import matplotlib.pyplot as plt 

导入数据集

假设我们有一个已知的数据集如下:
{state’:[‘a’,‘b’,‘c’,‘a’,‘b’,‘c’],
‘year’:[2018,2016,2017,2018,2016,2017],
‘average’:[87,85,88,87,85,88]},


from pandas import  DataFrame

#导入数据集
data = {'state':['a','b','c','a','b','c'],
         'year':[2333,2019,2617,2333,2016,2617],
         'avgage':[55,85,89,55,85,89]
        }
frame = DataFrame(data,columns=['year','state','avgage'])
#DataFrame是一种表格型数据结构,具有行索引,也有列索引。列索引为year、state、avgage
print('原始数据:')
print(frame)


也可以读入数据集(csv文件)

datasets = pd.read_csv('my_data.csv') 

发现重复与冗余

frame.duplicated().any
frame.drop_duplicates()  # 删除重复值,会删除除第一条后的,默认对所有变量判断
frame.duplicated().count

处理缺失值

frame.isnull().any(axis=0)# 判断各变量中是否存在缺失值
frame.isnull().sum(axis=0)# 各变量中缺失值的数量
frame.fillna()#就是使用指定的方法填充NA / NaN值,填充为0
frame.count()#是用来计算每一列或每一行的非na细胞,会返回对于每一列/行,非na /null项的数量

均值和自定义函数,比较麻烦单独说一下

#第一列指定众数填充,第二列使用众数,第三列使用均值。
#关于均值,frame.mean(),但是列中含有NA / NaN,无法评判什么类型,取第一个众数,来填充state列
#众数就是frame.mode函数。
frame.fillna(frame.mean())
frame['state'].fillna(frame.mode()['state'][0])
#运用自定义函数来填充, 假设自定义函数就是取众数的第一个值
fi=lambda x:x.fillna(x.mode()[0])
f=frame.apply(fi)
print('填充之后的结果:')
print(f)

数据集成

就需要不止一个的数据集

pd.merge(left, right, how='inner'/'left'/'right', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True
         , suffixes=('_x', '_y'), copy=True, indicator=False)
pd.concat([df1,df2,df3], ignore_index=True)#concat函数是在 pandas底下的方法,可以将数据根据不同的轴作简单的融合
pd.concat([df1,df2,df3], ignore_index=True,axis= 1)#当axis = 1的时候,concat就是行对齐,然后将不同列名称的两张表合并

数据变换(统一格式并标准化)

简单函数变换的常见方法:平方、开方、对数、差分运算等。
标准化、归一化、离散化。
数据清洗与预处理-Python实现

f = lambda x: ( x - min(x) )/ ( max(x) - min(x) )
#tranform()的作用是通过找中心和缩放等实现标准化
['optional'].transform(f)

f = lambda x: ( x - x.mean() )/ x.std()
['optional'].transform(f)

其实还可以通过导库实现,会更简单一些。在这里也就不多说了。

制作人:只识闲人不识君
日期:2020.07.14

本文地址:https://blog.csdn.net/weixin_46069678/article/details/107330392