脚本宝典收集整理的这篇文章主要介绍了数据清洗,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
数据分析过程 做菜过程
收集数据 明确要做什么菜品
数据清洗 去菜市场买菜
数据分析 炒菜
数据分析报告+数据可视化 拍照+发朋友圈并且吃菜
数据清洗是从记录表、表格、数据库中检测、纠正或删除损坏或不准确的记录过程
脏数据
没有进过处理自身有一定问题的数据(缺失、异常、重复。。。)
干净数据
经过处理完全符合规范要求的数据
read_csv
read_excel
read_SQL
read_htML
index columns head tail Shape descibe info dtyPEs
移除收尾的空格 大小写转换
duplicated()查看是否有重复的数据
drop_duplicates()删除重复数据
删除缺失值、填充缺失值
删除异常值、修正异常值
切割、筛选
Y m d H M S
步骤3到步骤8没有固定的顺序 前期由于不是非常熟练的情况下可以按照上述步骤来执行
import numpy as np import pandas as pd import matplotlib.pyplot as plt DF = pd.read_csv(r'qunar_freetrip.csv') # 1.查看前五条数据 掌握大概 df.head() # 2.查看表的行列总数 df.shape # 3.查看所有的列字段 df.columns # 发现列字段有一些是有空格的 # 4.查看数据整体信息 df.info() # 发现去程时间和回程时间是字符串类型需要做日期类型转换 # 5.快速统计 df.describe() df.columns
# 1.删除无用列字段
# df.drop(columns='Unnamed: 0',axis=1,inplace=True)
# 2.获取列字段
cols = df.columns.values
# 3.for循环依次取出列字段首位的空格
# 方式1 比较繁琐
# ccs = []
# for col in cols:
# ccs.append(col.strip())
# PRint(ccs)
# 方式2 列表生成式
df.columns = [col.strip() for col in cols]
# 4.重复数据查找
# df.duplicated()
# 5.简单的楼一眼重复数据的模样(布尔值索引) 可以省略
# df[df.duplicated()]
# 6.针对重复的数据 一般情况下都是直接删除的
# df.drop_duplicates(inplace=True)
# 7.确认是否删除
# df.shape
# 8.行索引会不会因为数据的删除而自动重置(删除完数据之后行索引是不会自动重置的)
## 如何获取表的行索引值
# df.index
## 右侧加上赋值符号就是修改行索引值
# df.index = range(0,df.shape[0])
df.tail()
@H_70_304@
sd = (df['价格'] - df['价格'].mean()) / df['价格'].std() # 判断的标准
# 利用逻辑索引筛选数据
df[(sd > 3)|(sd < -3)]
# 利用绝对值
df[abs(sd) > 3] # abs就是绝对值的意思(移除正负号)
# sd1 = (df['节省'] - df['节省'].mean()) / df['节省'].std() # 判断的标准
# 利用逻辑索引筛选数据
# df[(sd > 3)|(sd < -3)]
# 利用绝对值
# df[abs(sd1) > 3] # abs就是绝对值的意思(移除正负号)
df[df['节省'] > df['价格']]
横向合并pd.merge()
纵向合并pd.concat()
res = pd.concat([df[df['节省'] > df['价格']],df[abs(sd) > 3]])
del_index = res.index
df.drop(index=del_index,inplace=True)
df.index = range(0,df.shape[0])
df.isnull().sum() # 统计每个字段缺失数据条数
df[df.出发地.isnull()]
df.loc[df.出发地.isnull(),'路线名'].values
df.loc[df.出发地.isnull(),'出发地'] = [i.splIT('-')[0] for i in df.loc[df.出发地.isnull(),'路线名'].values]
df[df.目的地.isnull()]
df.loc[df.目的地.isnull(),'路线名'].values
df.loc[df.目的地.isnull(),'目的地'] = [re.findall(reg_exp,i) for i in df.loc[df.目的地.isnull(),'路线名'].values]
df.isnull().sum()/df.shape[0] # 我们自己规定占比小于0.1%可以直接删除
常见的四个方法:
1.isnull
2.notnull
3.fillna
4.dropna
保留几位小数
round(数据,保留几位)
df[df['价格'].isnull()]
df['价格'].mean() # 1732.5140901771338
round(df['价格'].mean(),1)
df['价格'].fillna(round(df['价格'].mean(),1),inplace=True)
df['节省'].fillna(round(df['节省'].mean(),1),inplace=True)
df.isnull().sum()
思路:就是统计某个字段下数据的个数 在利用气冲操作两者结合判断
如果两者数字相同表示没有重复的数据
不同表示存在重复的数据
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import re
df=pd.read_csv('qunar_freetrip.csv')
list=[]
res=df['酒店']
reg_exp1=' (.*?) '
for i in res:
hotel_type=re.findall(reg_exp1,i)
if not hotel_type:
t1='暂无'
else:
t1=hotel_type[0]
list.append(t1)
df['酒店类型']=list
list2=[]
res=df['酒店']
for n in res:
t2=n.split('/')[0]
hotel_score=t2.split(' ')[-1]
list2.append(hotel_score)
df['酒店评分']=list2
list3=[]
res=df['路线名']
for time in res:
t3=time.split('|')[0]
travel_time=t3.split('-')[1][-5:-1]
list3.append(travel_time)
df['游玩时间']=list3
以上是脚本宝典为你收集整理的数据清洗全部内容,希望文章能够帮你解决数据清洗所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。