参加的大数据创新应用本科队竞赛,我负责数据清洗和数据挖掘项目,以下分享数据清洗过程供大家参考。
文章目录
- 数据清洗
- 1. 读取数据
- 2. 删除数据中含有缺失值(NAN)的行数据
- 3. 从“简介”列中提取二手房的楼层和朝向,参考下列要求提取信息,并将提取结果存入“楼层”和“朝向”列。
- 4. 提取“户型”列中的室、厅、卫的数量,如“3室1厅1卫”则提取“3,1,1”,并将其数据类型转换为整数型,分别存入“室”“厅”和“卫”列。
- 5. 提取“发布日期”和“下架日期”列的年份,如2017,将下架年份减去发布年份获取二手房出售时长,当“下架日期”为“暂无”时,则使用当前年份(2023)减去发布年份获取出售时长,将计算所得的出售时长存入“出售时长(年)”列。
- 6. 从“下架日期”列中提取星期,并整理为“星期一”,“星期二”,…,“星期日”,并将结果存入“星期”列
- 7. 最后存入比赛要求文件格式(消除了索引)
数据清洗
1. 读取数据
import pandas as pd
import numpy as np
data=pd.read_csv('./data/SecondhandHouseV8.csv')
data.head()
2. 删除数据中含有缺失值(NAN)的行数据
data_n=data.dropna()
sum(data_n.isnull().any(axis=1))
3. 从“简介”列中提取二手房的楼层和朝向,参考下列要求提取信息,并将提取结果存入“楼层”和“朝向”列。
lou=[]
chao=[]
for row in data_n['简介']:
if row.split(',')[0].split('房')[1]=='':
row= row.split(',')[0].split('房')[0]
row=row.split('层')[0].strip('价格优惠,').strip('低').strip('高').strip('中')
chao.append(row)
else:
row=row.split(',')[0].split('房')[1]
if (len(row)<=3) & (len(row)!=0):
chao.append(row)
else:
row=row.strip(',环境优美')
row=row.strip('低层').strip('高层').strip('中层')
chao.append(row)
for row in data_n['简介']:
if '高' in row:
lou.append('高层')
elif '中' in row:
lou.append('中层')
elif '低' in row:
lou.append('低层')
4. 提取“户型”列中的室、厅、卫的数量,如“3室1厅1卫”则提取“3,1,1”,并将其数据类型转换为整数型,分别存入“室”“厅”和“卫”列。
shi=[]
ting=[]
wei=[]
for row in data_n2['户型']:
row1=row.split('室')[0]
shi.append(eval(row1))
for row in data_n2['户型']:
row2=row.split('室')[1].split('厅')[0]
ting.append(eval(row2))
for row in data_n2['户型']:
row3=row.split('厅')[1].split('卫')[0]
wei.append(eval(row3))
data_n2['室']=shi
data_n2['厅']=ting
data_n2['卫']=wei
5. 提取“发布日期”和“下架日期”列的年份,如2017,将下架年份减去发布年份获取二手房出售时长,当“下架日期”为“暂无”时,则使用当前年份(2023)减去发布年份获取出售时长,将计算所得的出售时长存入“出售时长(年)”列。
data_n2.index
for i in data_n2.index:
# print(i)
if data_n2['下架日期'][i]=='暂无':
data_n2['下架日期'][i]='2023-01-07'
down=pd.to_datetime(data_n2['下架日期'])
up=pd.to_datetime(data_n2['发布日期'])
l=down-up
l=l.astype(str)
l=[int(i.split()[0]) for i in l]
l=[np.round((i/365),2) for i in l]
data_n2['出售时长(年)']=l
6. 从“下架日期”列中提取星期,并整理为“星期一”,“星期二”,…,“星期日”,并将结果存入“星期”列
data_n2['下架日期']=data_n['下架日期']
for i in data_n2.index:
# print(i)
if data_n2['下架日期'][i]=='暂无':
data_n2['下架日期'][i]=None
down=pd.to_datetime(data_n2['下架日期'])
w=[]
for i in down:
# print(i)
week=i.weekday()+1
# print(week)
w.append(week)
data_n2['星期']=w
7. 最后存入比赛要求文件格式(消除了索引)
data_n2.to_csv('./data/result3.csv',encoding='utf-8',index=None)