文章目录
一、获取数据集并寻找存在的问题
1、阅读数据集描述
; 2、查看数据并发现问题
缺失值比较多
价格,里程不为实数
数据存在重复
部分数据没有离散化
存在异常值
其他问题
二、清洗步骤
1、数据格式转换
价格$1,000 -> 1000(整数),其他数据去掉逗号
def f_1(s):
if '$' in str(s):
s = str(s).strip('$')
s = str(s).replace(',','')
return float(s)
df['Price'] = df['Price'].apply(f_1)
df['Mileage'] = df['Mileage'].apply(f_1)
2、去重复
print ('数据集是否存在重复观测: \n', any(df.duplicated()))
检查数据集是否有重复
在这个数据集中’Condition’,’Condition_Desc’,’Price’,’Location’是比较重要的几个属性,可以把这几个字段重复的删除
print(df[df.duplicated()])
print(np.sum(df.duplicated()))
df.drop_duplicates(subset= ['Condition','Condition_Desc','Price','Location'],keep='first',inplace=True)
3、缺失值处理
(1)删除法
df.dropna(subset=['Condition','Price','Mileage'],inplace=True)
(2)填补法(种类繁多,见下图)
4、异常值处理
画出箱线图
plt.subplot(131)
df.Price.plot(kind = 'box')
plt.subplot(132)
df.Mileage.plot(kind='box')
plt.subplot(133)
df.Bid_Count.plot(kind='box')
plt.tight_layout()
plt.show()
删除或者替换异常值(极大/极小)
def substitute(attr,df):
attr = str(attr)
P1 = df[attr].quantile(0.01);
P99 = df[attr].quantile(0.99)
df.loc[df[attr] > P99, attr] = P99
df.loc[df[attr] < P1, attr] = P1
for a in {'Price','Mileage','Bid_Count'}:
substitute(a,df)
这样数据就看起来好多了
5、数据离散化
数据离散化实际就是”分箱”——就是把数据分成不同的几类,便于分析
常用函数pandas.cut:
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
df = pd.read_csv('MotorData.csv',encoding = 'gbk',na_values='Na')
w = [100,1000,5000,10000,20000,30000]
df['Price'] = pd.cut(df['Price'],bins=w,labels=['低','便宜','划算','中等','高'],ordered=True)
df['Price'].hist()
plt.show()
参考
去重复
https://blog.csdn.net/dzysunshine/article/details/100022994
箱线图
https://blog.csdn.net/sscc_learning/article/details/78771324
Original: https://blog.csdn.net/qq_51539256/article/details/122740971
Author: 英雄各有见
Title: python数据分析之数据清洗(以摩托车的销售情况数据为例)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/600714/
转载文章受原作者版权保护。转载请注明原作者出处!