这个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就是行对齐,然后将不同列名称的两张表合并
数据变换(统一格式并标准化)
简单函数变换的常见方法:平方、开方、对数、差分运算等。
标准化、归一化、离散化。
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
希望与广大网友互动??
点此进行留言吧!