机器学习18 数据清洗小任务(楼盘数据清洗)

项目背景

希望将房间信息生成一些量化指标和宏观指标
在这里插入图片描述

任务要求

将 室内描述 量化和清洗
结果类似于:
在这里插入图片描述

实战

去重

整体看看有哪些指标,先去重,目的是想把指标选出来,有这个指标我就打上1,没有就打0 (效果如上图)
在这里插入图片描述

链接:fillna()填充空值

利用集合的特性(不关注重复性和顺序)来去重用set(data[' xxx ']) 去重后更方便看看到底有哪些指标,发现去重后 室内描述 这一列的数据从41484下降到了1597条
在这里插入图片描述

用正则来切分生成list

1,首先观察数据,找到切分的符号
Excel中 数据–筛选 进行查看

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
分割符号是 , - / 正则公式re.split(r'符号|符号|符号', 字符串名)

2,排除掉空格这种影响切分的非符号
在这里插入图片描述
我想把里面的 床空格-空格电视 变成 床-电视
replace(' ','')

以第一行为例,进行正则分割和空格的替换:
在这里插入图片描述

s='床,wifi,电视,洗衣机,冰箱,暖气,空调,热水器'
re.split(r',|-|/',s.replace(' ',''))

在这里插入图片描述
3,遍历整列
list() 是强转为list列表
在这里插入图片描述
4,删去无效指标
遍历生成的去重指标列表中空字符串'',和'暂无信息' '暂无资料' 这种就手动删除
在这里插入图片描述
思路是把要删除的指标生成一个列表存起来,遍历这个列表里面的指标,在result里面remove这些指标
在这里插入图片描述
5,特殊处理(指标名不同但含义相同)
链接:apply和lambda

#1,电视:有线电视,电视机,彩电,电视

#2,天然气:天然气,管道燃气,燃气,煤气

#3,车位:车库,车位
总体思路:只要电视天然气车位 这三列,例如:有电视,就在房间描述出现‘电视’这一列标1,或者在房间描述出现‘彩电’也标1,或者在房间描述出现‘电视机’也标1,或者在房间描述出现‘有线电视’也标1,判断标1还是0这个操作可以用lambda函数来实现,他和def定义一个函数效果一样,但是更方便,适用于这种简单的函数操作。用apply函数把判断好的1,0标注到电视,天然气,车位这三列上。

以电视为例:

data['电视']=data['室内描述'].apply(lambda x:1 if '电视' in x or '彩电' in x else 0)

最后再把这些特殊处理的列名全部从上一步的标签result中remove
(因为刚才已经用apply将1,0标到电视,天然气,车位这三列上了,所以这三列也可以remove)
在这里插入图片描述

数值化处理

剩下34个还没标1,0的指标,result里面有的指标就标1,没有就标0

在这里插入图片描述

导出完整数据
data.to_excel('导出文件名.xlsx',header=True,index=False)
#header是列名,index是索引序号

在这里插入图片描述
最后结果:
在这里插入图片描述

全文代码

在这里插入图片描述

### 导包

import pandas as pd 
import numpy as np
import re

### 导数据 

data = pd.read_excel(r'楼盘数据.xlsx')  #Excel文件是 pd.read_excel(r'xxx.xlsx') 
data.info()

#将数据中值为空的赋值为空字符串 fillna('')
data = data.fillna('')
data.info()

# set()去重
shinei = list(set(data['室内描述']))

len(shinei)

#以第一个为例正则,生成list
s = '床,wifi,电视,洗衣机,冰箱,暖气,空调,热水器'
s.replace(' ','')
re.split(r',|-|/',s.replace(' ',''))

#循环遍历整列生成所有list
result = []
for i in shinei:
    result.extend(re.split(r',|-|/',i.replace(' ',''))) #extend()是追加列表可以多个对象,append只追加单个对象
result = list(set(result)) #去重
print(len(result))
print(result)

move_shinei =['','暂无信息','暂无资料'] #把要删除的指标生成一个列表
for j in move_shinei:
    result.remove(j)#在result里面删除move_shinei列表里的指标
print(len(result))
print(result)

### 特殊处理

#1,电视:有线电视,电视机,彩电,电视
data['电视'] = data['室内描述'].apply(lambda x:1 if '电视'in x or '彩电' in x else 0)
#2,天然气:天然气,管道燃气,燃气,煤气
data['天然气'] = data['室内描述'].apply(lambda x:1 if '天然气' in x or '燃气'in x or '煤气'in x else 0 )
#3,车位:车库,车位
data['车位']=data['室内描述'].apply(lambda x:1 if '车库'in x or '车位'in x else 0)


teshu_shinei = ['有线电视','电视机','彩电','电视','天然气','管道燃气','燃气','煤气','车库','车位']
for k in teshu_shinei:
    result.remove(k)
print(len(result))
print(result)



### 数值化处理

for shinei in result:
    data[shinei] = data['室内描述'].apply(lambda x:1 if shinei in x else 0)
    

data.head()

data

### 导出完整数据

data.to_excel('楼盘数据_清洗.xlsx',header=True,index=False)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值