本文共 3109 字,大约阅读时间需要 10 分钟。
数据清洗 ---- 流程
一、数据的读写:
pd.read_sql_…() pd.read_csv() pd.read_excel()二、数据探索与描述:
df.shape df.info() df.describe() 数值型数据的统计描述三、数据简单处理:行、列
1.去除数据间的空格:多指存在于特征之间的空格----strip() strip()函数一次只能去除一个特征的空格,可以使用循环、列表去除 [x.strip() for x in features] 2.英文字母大小写转化四、重复值处理:
1.duplicated() ---- 判断是否含有重复值 2.drop_dupolicates() ---- 删除重复值五、异常值处理:
1.删除异常值 2.作为缺失值处理 3.3∂原则、箱线图 4.平均值修正、盖帽法修正 5.不处理:业务分析挖掘价值(抱大腿)六、缺失值处理:
1.删除缺失值 2.均值填补法 3.向前/后填充 4.模型填补法七、文本字符串处理:
1.去除前后空格 ---- strip() 2.正则表达式处理(提取)所需数据:df['酒店评分'] = df['酒店'].str.extract('(\d\.\d分/5分)',expand=True)
True为DataFrame,False为Series八、时间序列处理:
1.将系统时间格式化 2.系统时间和时间戳相互转化 3.年月日的提取
数据探索与描述:
了解所要处理数据集的大致信息,可以对我们之后的操作进行适当的预见。
import numpy as npimport pandas as pddf = pd.read_csv('data/qunar_freetrip.csv',index_col=0)print('形状:\n',df.shape) #(5100, 13)print('基本信息:\n',df.info)print('描述信息:\n',df.describe())print('前5行:\n',df.head())
数据简单处理:行、列:
对于一些数据特征,在后续操作中需取DataFrame的某些列进行操作,对于特征中含有空格的操作起来不方便,为此我们可以提前将其格式化处理,利用strip()函去除特征中的空格。
##数据清洗##处理特征空格print(df.columns)df.columns = [x.strip() for x in df.columns]print(df.columns)
重复值处理:
这里处理的主要是记录重复,关于另一种
##处理重复值print(df.duplicated()) #返回布尔值a = df[df.duplicated()]print(a) #显示重复值的数据记录print(df.duplicated().sum()) #100df.drop_duplicates(inplace=True)# print(df.shape) #(5000, 13)
处理异常值:
对于此处,该站主使用的是三倍标准差方法处理的,其原理是超出该范围的数据视为异常值。基本原理是在(-3,3)范围内的数据视为正常值,实际操作中利用abs()取离差标准化后数据的绝对值,最后只需与三倍标准差比较,找出异常数据集m。价格与节省也存在异常问题,按照常理来说节省是打折的钱,理应小于价格,故通过这一特点进一步找出异常数据集n。通过concat()合并异常数据集并得出其索引,作为删除异常数据的标准。
##处理异常值print(df.describe())print(df.describe().T)#找出价格异常值#print(df['价格'])std = ((df['价格'] - df['价格'].mean())/df['价格'].std())m = df[std.abs() > 1*3]# print(m)#找出节省异常值n = df[df['价格']
处理空值:
对于空值数据记录,我们采用isnull()或notnull()来进行初步判断(结合sum()函数)。
接着依次对空值特征、记录进行填补,此处采用填补是因为可以通过路线名特征获取缺失的数据。 并且填补是对于字符串型数据通过提取字段信息完成,先将路线名特征值转换为字符串,在按照字符串索引提取;对于数值型缺失数据,一般采用均值填补法,这其中的round()用来保留填充值的小数位数。##处理空值a = df.isnull().sum()print(a)# 处理出发地空值# b = df[df['出发地'].isnull()]# print(b)# print([str(x)[:2] for x in df.loc[df['出发地'].isnull(),'路线名']])df.loc[df['出发地'].isnull(),'出发地'] = [str(x)[:2] for x in df.loc[df['出发地'].isnull(),'路线名']]# a = df.isnull().sum()# print(a)#处理目的地空值# b = df[df['目的地'].isnull()]# print(b)# print([str(x)[3:5] for x in df.loc[df['目的地'].isnull(),'路线名']])df.loc[df['目的地'].isnull(),'目的地'] = [str(x)[3:5] for x in df.loc[df['目的地'].isnull(),'路线名']]# a = df.isnull().sum()# print(a)# 利用均值填充处理价格、节省的缺失值df['价格'].fillna(round(df['价格'].mean(),0),inplace=True)df['节省'].fillna(round(df['节省'].mean(),0),inplace=True)# a = df.isnull().sum()# print(a)
处理文本信息:
在进行一系列数据清洗之后,我们可以根据当前的特征来进行特征提取。
例如:根据酒店特征提取出酒店评分、酒店等级、入住天数特征。 对于字符串信息,要从中提取需用到。## 处理文本信息#提取酒店评分df['酒店评分'] = df['酒店'].str.extract('(\d\.\d分/5分)',expand=True) #True为DataFrame,False为Series#提取酒店等级df['酒店等级'] = df['酒店'].str.extract(' (.+) ',expand=True) #True为DataFrame,False为Series#提取酒店入住天数信息df['天数'] = df['路线名'].str.extract('(\d+)天',expand=True) #True为DataFrame,False为Seriesprint(df[['天数','酒店等级','酒店评分']].head())##保存处理后的数据df.to_csv('F:\Python数据\去哪儿网数据清洗课程\qunar_freetrip_deal.csv',index=True)
清洗数据后的表格:
转载地址:http://drhq.baihongyu.com/