python去除字符串的标点符号⽤_7步搞定数据清洗-Python数
据清洗指南
脏数据就是在物理上临时存在过,但在逻辑上不存在的数据。
数据清洗是整个数据分析过程的第⼀步,就像做⼀道菜之前需要先择菜洗菜⼀样。 数据分析师经常需要花费⼤量的时间来清洗数据或者转换格式,这个⼯作甚⾄会占整个数据分析流程的80%左右的时间。
在这篇⽂章中,我尝试简单地归纳⼀下⽤Python来做数据清洗的7步过程,供⼤家参考。
⼀、数据预处理
⼀、数据预处理
1. 部署环境,导⼊分析包和数据
#导⼊数据分析包
import pandas as pd
import numpy as np
#导⼊csv数据
#dtype = str,最好读取的时候都以字符串的形式读⼊,不然可能会使数据失真
#⽐如⼀个0010008的编号可能会读取成10008
fileNameStr = './Actual transactions from UK retailer.csv'
DataDF = pd.read_csv(fileNameStr,encoding = "ISO-8859-1",dtype = str)
# encoding = "ISO-8859-1" -- ⽤什么解码,⼀般会默认系统的编码,如果是中⽂就⽤ "utf-8"
DataDF = pd.read_csv(fileNameStr,encoding = "utf-8",dtype = str)
2. 尝试去理解这份数据集
我们可以通过对数据集提问来判断这份数据能不能满⾜解答我们的问题,数据是否⼲净需不需要进⼀步处理,问题包括但不限于:
数据集多少数据?
包含了什么字段?字段格式是什么?
字段分别代表什么意义
字段之间的关系是什么?可以⽤做什么分析?或者说能否满⾜了对分析的要求?
有没有缺失值;如果有的话,缺失值多不多?
现有数据⾥⾯有没有脏数据?尤其需要注意⼈⼯输⼊的数据,经常会出现名称写错,多输⼊空格等等的情况3. 下⾯我们就结合代码来看⼀下数据
#1 从宏观⼀点的⾓度去看数据:查看dataframe的信息
DataDF.info()
也可以⽤这两条来看:
#1.1查看每⼀列的数据类型
DataDF.dtypes
#1.2有多少⾏,多少列
DataDF.shape
# 2.检查缺失数据
# 如果你要检查每列缺失数据的数量,使⽤下列代码是最快的⽅法。
# 可以让你更好地了解哪些列缺失的数据更多,从⽽确定怎么进⾏下⼀步的数据清洗和分析操作。
DataDF.isnull().sum().sort_values(ascending=False)
# 3.是抽出⼀部分数据来,⼈⼯直观地理解数据的意义,尽可能地发现⼀些问题
DataDF.head()
可以看到:
1)Country和UnitPrice都出现了NaN值,需要去掉
2)InvoiceDate的时间出现具体时分,可以删去
3)Description⼤概率是⼈⼯填写的数据,⼀般都会有⽐较多格式问题。
猜测会存在有标点符号掺杂/⼤⼩写不⼀致等问题,所以进⼀步这些⼈⼯填写数据的去重项拎出来研究⼀下
# 查看这个商品名称的去重项
DataDF['Description'].unique()
# 设置输出全部的内容
# threshold就是设置超过了多少条,就会呈现省略
#(⽐如threshold=10的意思是超过10条就会省略)
np.set_printoptions(threshold=np.inf)
发现有很多空格的问题
根据第⼀步数据预处理后,整理⼀下该数据集有下列问题需要处理:
1)调整数据类型:由于⼀开始⽤到了str来导⼊,打算后期再更换格式,需要调整数据类型。
1)调整数据类型:
2)修改列名:
2)修改列名:该数据的名称不易于理解,需要改列名
3)选择部分⼦集:因为有部分列在数据分析中不需要⽤到
3)选择部分⼦集:
4)可能存在逻辑问题需要筛选:
4)可能存在逻辑问题需要筛选:⽐如Unit Price为负
5)格式⼀致化:Description可能会存在有标点符号掺杂/⼤⼩写不⼀致/空格重复出现等问题
5)格式⼀致化:
6)消灭空值:CustomerID、Description、Country和UnitPrice都出现了NaN值,需要去掉
6)消灭空值:
于是下⾯就开始后续的数据清洗6步
⼆、调整数据类型
数据类型调整前
#字符串转换为数值(整型)
DataDF['Quantity'] = DataDF['Quantity'].astype('int')
#字符串转换为数值(浮点型)
DataDF['UnitPrice'] = DataDF['UnitPrice'].astype('float')
⽇期调整前(为求简便这⾥⽤已经剔除分秒,剔除的办法后⾯在格式⼀致化的空格分割再详细说)
#数据类型转换:字符串转换为⽇期
#errors='coerce' 如果原始数据不符合⽇期的格式,转换后的值为空值NaT
DataDF.loc[:,'InvoiceDate']=pd.to_datetime(DataDF.loc[:,'InvoiceDate'],                                          format='%d/%m/%Y',
errors='coerce')
#!!⚠  format 是你[原始数据]中⽇期的格式
%y 两位数的年份表⽰(00-99)
%Y 四位数的年份表⽰(000-9999)
%m ⽉份(01-12)
%d ⽉内中的⼀天(0-31)
%H 24⼩时制⼩时数(0-23)
%I 12⼩时制⼩时数(01-12)
%M 分钟数(00-59)
%S 秒(00-59)
⽇期类型调整后
数据类型调整完毕
三、修改列名
python怎么读csv数据

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。