Python数据预处理步骤:
- 数据导入
- 数据查看
- 数据清洗
- 数据提取&筛选
- 数据排序
- 数据汇总&统计
- 数据标准化
- 导入相关包数据存储
数据清洗的详细全过程(带案例思路写)
1、导入相关包
Import pandas as pd
Import numpy as np
%matplotlib inline ?#jupyter notebook 一定要运行这一行代码,在 本地cell中显示图形(注释不能同行,会报错,换行)
Import glob ??#读取多个文件并合成一个文件 Path= ‘ ???’ ?#设置文件的路径
All.files=glob.glob(path+ ‘/*.csv’) ? #合并多个数组 All_date=[] For filename in all_files; ??date=pd.read_csv( filename,index_col=none,header=0) ??All_date.append(date) Date2=pd.concat(all_date.axis=0,ignore_index=true) ? #axis=0 指列,axis=1指行
2、导入数据集
date=pd.read_csv('文件路径')
date=pd.read_excel('文件路径')
date.head(2) ?#查看前两行
date.tail() ??#查看后几行
3、初步探索数据
date.shape ??#查看数据规模(维度) date.dtypes ??#查看各变量的数据类型 date.info() ???#查看数据整体信息 date.describe() ???#显示数值型数据的描述统计 date.[‘origin’].unique() ??#查看origin 唯一值 date.[‘origin’].values() ??#查看origin 的数据
4、简单的数据处理
date.columns? ? #看列名?
Col =date.columns.values? ? ?#col提取信息
date.columns=[x.strip()for x in col]? ? ?#strip去除前后空格
date.columns
5、重复值的处理
date.duplicated? ? ?#返回布尔型数据,告诉重复性数据
date[date.duplicated ]? ? #看重复的记录
date.duplicated.sum() ? 看计数
删除重复值 Drop_duplicates()
date.Drop_duplicates(inplace=true) ?#inplace=true 表示直接在源数据上操作
date.head()
date.shape(0) 看有多少行
date.index=range(date.shape[0]) ? #重新建立索引
date.drop_duplicates(subset=[‘ ’, ‘’ ],keep= ‘first’,inplace=false) ? #指定变量判断 ? first保留第一个
6、异常值的处理
date.describe().T ? ?#.T是行列转值
Sta=(date[“价格”]-date[“价格”].mean())/date[“价格”].sta()? ?#找出价格的异常值
Sta.abs()>3? ? ? ?#标准差大于3倍为异常
date[Sta.abs()>3]
date[date.节省>date.价格]? ? #找出节省的异常值
Delindex=pd.concat([date[date.节省>date.价格],date[Sta.abs()>3]]).index? ?#把异常值合并索引
date.drop(delindex,inplace=true)? ? ?#在源数据中删除异常值
date.shape? ? #查看数据规模
7、缺失值的处理
date.isnull().any(axis=0)? ?#查看空值 判断各变量中是否存在缺失值? date.isnull().any(axis=1) ? #判断数据行中是否存在缺失值 ?axis=o是列,axis=1是行。 date.loc [date.isnull().any(axis=1)] ? ?#定位缺失值所在的行 date.isnull().sum()? ? #各变量值缺失的数量
date.loc[date.出发地.Isnull (),”出发地”]= [str(x)[:2]for x in date.loc[date.出发地.isnull(),”线路名”]]
date.loc[date.出发地.Isnull (),”目的地”]= str(x)for x in date.loc[date.目的地.isnull(),”线路名”][5:7
date.[“价格”].fillna(round(date.[“价格”].mean(),0),inplace=true)
date.[“节省”].fillna(round(date.[“价格”].mean(),0),inplace=true) ? #mean是平均值
date.isnull().sum()
8、处理空值
Date3= date.Dropna()? ? ? #直接删除空值数据所在行 Date_null_0=date.fillna(0,inplace=false)? ? ?#定义缺失值为0 ?inplace=false就是不覆盖原始的数据 Date_null_value=date.fillna(values={‘horsepower’:date[‘horsepower’].mode()[0],inplace=false})? ? ? ?#对缺失值进行填充 ? mode 众数
9、数据排列:
Date.sort_values(by= ‘xx ’ ) ? ? ?#值排序:从小到大,一列值 Date.sort_values(by= [‘xx ’, ‘xx’] ) ?#值排序:两列值 Date.sort_values(by= ‘xx ’,ascending=false ) ?#值排序:两列值 Date.sort_index(‘index’, ascending=false) ? #索引排序
10、数据标准化
[0,1]标准化 ? 将数据压缩到0~1之间 公式 Def MaxMinNormalization(x): ? ?#定义x函数 ?????????????X=(x-np.min(x))/(np.max(x)-np.min(x)) ?????????????Return x ? ? s=MaxMinNormalization(x).reset_index ? #把x函数重新建群集 ????s? ? ?#输出s
Z-score标准化? ?基于数据均值和方差的标准化方法,标准化的数据的均值为0,方差为1的正态分布。 ?要求原始数据的分布近似为高斯分布,否则效果会很差。
公式 Def ZescoreNormalization(x): ? ?????????X=(x-np.mean(x))/(np.std(x)) ? ?#np.std(x) 标准差 ??????????Return x y=ZescoreNormalization(x).reset_index? y
11、处理文本型数据
????????①去空格strip ????????②?处理中间有,()之类的数据:replace(',','') ????????③正则表达式
如果想要获取一系列的文本信息,可以使用正则表达式 正则表达式通常用来检查某个规则的文本
date.head(2)?? ? date[“酒店评分”]=date.酒店Str.exstract(“(\d\.\d)分/5分”), expand=false ? ?#\d\.\d)分/5分 是提取规则 ,expand=false :返回index,? expand=true:返回dateframe?
12、数据存储
date.to_excel(‘xx路径.xls’, sheet_name= ‘xx’ )
|