以下是python数据清洗常用的方法,所用的数据在我的资源里可以下载
import numpy as np
import pandas as pd
if __name__ == "__main__":
'''
#显示完整数据的方法
pd.set_option('display.max_columns', 1000)
pd.set_option('display.width', 1000)
pd.set_option('display.max_colwidth', 1000)
'''
df = pd.read_csv("./qunar_freetrip.csv",index_col=0)
df.head()
#print(df.head(5)) 查看数据集的前面多少行
#print(df.shape) 查看数据集基本情况,多少行,几个特征
#print(df.info()) 查看数据集的结构
'''print(df.describe()) 描述数值型数据的统计mean(均值) 1765.714905 474.139878
std(方差) 2580.129644 168.893780
'''
#print(df.columns) 查看可以引用的特征
#print(df["价格 "])
col = df.columns.values #将人特征列表赋值给col ['出发地 ' ' 目的地' '价格 ' '节省' '路线名' '酒店' '房间' '去程航司' '去程方式' '去程时间' '回程航司''回程方式 ' '回程时间']
df.columns = [x.strip() for x in col] #去除所有特征值中的空格
#处理重复值
#print(df.duplicated()) #判断是否有重复值,所有特征中的数据都相同,就会返回一个true
#print(df[df.duplicated()]) #布尔索引,找到所有重复值的位置
#print(df.duplicated().sum()) #统计一共有多少重复值
df.drop_duplicates(inplace=True) #inplace=True,表示直接再源数据上进行操作
#print(df.shape)
'''
a = df.drop_duplicates()
print(a)
print(df.shape)
'''
#print(range(df.shape[0])) #查看数据的索引的范围
#df.index = range(df.shape[0]) #更新数据的索引
#print(df)
#处理异常值
#print(df.describe().T) 查看数值型数据的统计情况
#找出异常值
#sta = (df['价格']-df['价格'].mean())/df['价格'].std()
#print(df[sta.abs()>3]) #绝对值大于3倍标准差
#找出节省的异常值
#print(df[df.节省>df.价格])
#将两个数据异常的表租组合起来 pd.concat([df[df.节省>df.价格],df[sta.abs()>3]])
#提取异常值的索引
#delindex = pd.concat([df[df.节省>df.价格],df[sta.abs()>3]]).index
#print(delindex)
#在源数据集中删除异常的数据
#df.drop(delindex,inplace=True)
#print(df.shape)
#缺失值处理
#print(df.isnull().sum()) #查看数据中的缺失值
#df.notnull() 查看不是缺失值的数据 df.dropna() 删除缺失值 df.fillna() 填补缺失值
#print(df[df.出发地.isnull()]) #输出出发地是空值的数据
#df.loc[df.出发地.isnull(),'出发地'] = [str(x)[:2] for x in df.loc[df.出发地.isnull(),'路线名']]
#print([str(x)[:2] for x in df.loc[df.出发地.isnull(),'路线名']])
#df.loc[df.目的地.isnull(),'目的地'] = str(df.loc[df.目的地.isnull(),'路线名'].values)[5:7]
#print(df[df.目的地.isnull()])
#均值填充解决异常值
df['价格'].fillna(round(df['价格'].mean(),0),inplace=True)
df['节省'].fillna(round(df['节省'].mean(), 0), inplace=True)
print(df.isnull().sum())