使用pandas清洗数据(中文字符串的正则使用)

      对于之前的从链家网爬取下来的福田区二手房的数据,只是为了提取信息。但是如果要进行数据分析必须对数据进行清理和转换。python的pandas库可以说是中等规模数据处理最好用的工具。下面我就来演示如何对以下数据进行处理:

环境:

win10 pro

python3.6

pandas,re

26105100952283 长城一花园南北通透精装三房拓出飘窗好楼层好采光 长城花园   | 3室1厅 | 104.7平米 | 南 北 | 精装 | 有电梯 低楼层(共17层)1987年建塔楼  -   百花 41人关注 / 共39次带看 / 4个月以前发布 距离3号线(龙岗线)华新站1151米 房本满五年 780 万 单价74499元https://image1.ljcdn.com/440300-inspection/6ef5054c-c0bc-4979-89b7-2d3c07b6b8d4.jpg.280x210.jpg.232x174.jpg
27105101016387 红树绿洲,南向通透两房看花园,看房方便 房主自荐 红树绿洲   | 2室1厅 | 58.98平米 | 东南 | 精装 | 有电梯 低楼层(共28层)2007年建板塔结合  -   福田保税区 43人关注 / 共29次带看 / 2个月以前发布 距离3号线(龙岗线)益田站1176米 房本满五年 365 万 单价61886元https://image1.ljcdn.com/440300-inspection/b8154d56-7fe9-43f0-a89d-fd32a93422a5.JPG.280x210.jpg.232x174.jpg

      首先介绍我对于在中文字符串中使用正则式的一点小经验(关于正则表达式的基本使用方法和正则表达式的函数在本章不做说明):

示例:

an=' 绿景新美域 大两房 东南向 地铁口物业 业主诚心卖 绿景花园二期   | 2室1厅 | 72.68平米 | 南 | 精装 低楼层(共29层)2005年建板塔结合  -  房本满五年 472 万 单价64943元'
print (re.findall(r'\s.{5}\s',an))
#用空格隔开,且有五个字符的字符串
print (re.search(r'\s(.{5,6})(?:期)\s+',an).group())
#找到首个有六个字符串短语  
print (re.search(r'\s(?:低)(.{10,20})(?:合)|(?:结)\s+',an).group())
#以低开始并以合结束的,中间10到20个字符的字符串
sp_an=[x for  x  in re.split(' ',an) if str(x) !='' and str(x).find('东')!=-1]
print (sp_an)
#字符串的find方法应用。用空格分割整个字符串并找到含有东这个字的字符串
sp_bn=[x for  x  in re.split(' ',an) if str(x) !='' and str(x).__contains__('房本')]
print (sp_bn)
#用空格分割字符串并找到含有房本这两个字的字符
print ([x for x in re.findall('\S+',an) if str(x).__contains__('室')])
#找到字符串中不是空格的字符,并找到其中含有室这个字的字符串
print(re.match('(?P<de1>.*)\|(?P<de2>.*)\|(?P<de3>.*)\|(?P<de4>.*)\|(?P<de5>.*)-(?P<de6>.*)',an).group('de6'))
print (re.split('\s',an))
print (re.split('(口|业)',an))
print (re.search(r'\s(?:低|业)(.{3,20})(?:合|卖)\s+',an).group())
print (re.search(r'\d+(?:平米)',an).group())

如此我就能很轻松的将中间一列的信息切割成我需要的片段

import pandas as pd
import re
import numpy as np
import xlwings as xw

#########################################################
'''
该模块主要清洗上述链家福田二手数据以便于分析,并将数据输出到目标excel表格

结构化数据如下,利用正则表达式进行提取
大房间,大阳台,满五年,无增值税,视野开阔 益田村   | 3室2厅 | 105.43平米 | 北 | 其他 中楼层(共24层)2002年建板塔结合  -   石厦 50人关注 / 共91次带看 / 4个月以前发布 距离3号线(龙岗线)益田站205米 房本满五年 随时看房 600 万
'''

#####################################################################
lian=pd.read_excel(r'd:\\lianjia_ershou_futian_100.xlsx',sheet_name='Sheet1')
# 用正则将数据分割成为了9列数据
patt=r'(?P<desc>.*)\s{3}\|(?P<room>.*?)\|(?P<size>.*?)\|(?P<direct>.*?)\|(?P<floor>.*)-\s{3}(?P<area>.*)\s{1}(?P<foucs>\d{1,4}.*)\/(?P<watch>.*)\/(?P<pubtime>.*)'
# print (lian['dec'].apply(lambda x:re.match(patt,x).group('direct')))
# 利用正则将dec分成9列数据
# 将dec列分成village和review
new_table=lian['dec'].str.extract(patt,expand=True)
new_table['village']=new_table['desc'].str.split(' ').str[-1]
new_table['review']=new_table['desc'].str.strip().str.split(' ').str[:-1].apply(lambda x:''.join(x))

# 将pubtime分成下面三列
new_table['pub_month']=new_table['pubtime'].str.split(' ').str[1]
new_table['price']=new_table['pubtime'].str.split(' ').str[-3:].apply(lambda x:''.join(x))
new_table['tr_other']=new_table['pubtime'].str.split(' ').str[2:-3].apply(lambda x:''.join(x))

# 将两个表格合并并除去不需要的列
all_infor=pd.concat([lian,new_table],axis=1)
# print (all_infor.columns)
all_infor=all_infor[['code', 'review', 'village', 'area', 'room', 'size', 'direct', 'floor',
       'foucs', 'watch', 'pub_month', 'price',
       'tr_other', 'img']]



####################################################
# 将表格插入到存在的excel表格中
def table_insert_excel_sheets():
    book=xw.Book(r'd:\\lianjia_ershou_futian_100.xlsx')
# 下面这句话的意思是如果sheet是中含有名字是details的工作表,删除该工作表。
    for a in book.sheets:
        if a.name in ['details']:
            a.delete()
    sht2=book.sheets.add('details')
    sht2.activate()
    sht2.range('a1').value=all_infor
    rng = sht2.range('A1').current_region
    rng.autofit()
    book.save()
    book.close()

table_insert_excel_sheets()


 

最后分割完成以后得到以下的形式:

 codereviewvillagearearoomsizedirectfloorfoucswatchpub_monthpricetr_otherimg
01.05101E+11大房间,大阳台,满五年,无增值税,视野开阔益田村石厦 3室2厅  105.43平米  北  其他 中楼层(共24层)2002年建板塔结合  50人关注  共91次带看 4个月以前发布600万单价56910元距离3号线(龙岗线)益田站205米房本满五年随时看房https://image1.ljcdn.com/440300-inspection/61a23ca4-1051-44dc-8821-b643bd6efe51.jpg.280x210.jpg.232x174.jpg
11.05101E+11新洲大厦精装三房,朝南向,满五唯一红本在手,有钥匙房主自荐新洲大厦新洲 3室1厅  108.81平米  西南  精装 | 有电梯 高楼层(共33层)1996年建板塔结合  196人关注  共94次带看 7个月以前发布450万单价41357元距离3号线(龙岗线)石厦站858米房本满五年随时看房https://image1.ljcdn.com/440300-inspection/ca66cec8-dbaa-4e5e-a67b-754beba94d00.JPG.280x210.jpg.232x174.jpg
21.05101E+11京基御景华城2室1厅265万京基御景华城赤尾 2室1厅  45.72平米  西北  其他 | 有电梯 中楼层(共34层)2005年建板塔结合  80人关注  共35次带看 9天以前发布265万单价57962元距离7号线赤尾站189米房本满五年随时看房https://image1.ljcdn.com/440300-inspection/af4e1303-8aa1-444d-a451-6eb172cb68bf.jpg.280x210.jpg.232x174.jpg
31.05101E+11梅林一村多层围合南向高层三房无遮挡采光好梅林一村八区梅林 3室2厅  92.39平米  南 西南  简装 | 有电梯 高楼层(共9层)1998年建板塔结合  4人关注  共33次带看 1个月以前发布710万单价76849元距离9号线下梅林站698米房本满五年随时看房https://image1.ljcdn.com/440300-inspection/30e3a8b7-40f2-4f81-b9d1-6276c1443bf4.jpg.280x210.jpg.232x174.jpg
41.05101E+11高层,看海景通风流畅给您一个舒适又便宜的家庭新洲大厦新洲 4室1厅  108.81平米  西南  毛坯 中楼层(共33层)1996年建板塔结合  44人关注  共24次带看 9天以前发布430万单价39519元距离3号线(龙岗线)石厦站898米房本满五年https://image1.ljcdn.com/440300-inspection/37c48102-5921-4331-abf5-dfbab3927e63.jpg.280x210.jpg.232x174.jpg
51.05101E+11正规大2房,赠送18平大阳台可改3房,满五年唯一税费少房主自荐尚书苑梅林 2室1厅  55.12平米  西北  简装 低楼层(共16层)2005年建板塔结合  8人关注  共6次带看 8天以前发布375万单价68034元距离9号线梅景站227米房本满五年https://image1.ljcdn.com/440300-inspection/019bfc1c-b44f-427f-a595-9c84c3c76aed.jpg.280x210.jpg.232x174.jpg
61.05101E+11红树林边上海景刚需小户型这价格不能错过满五唯一红树家邻上下沙 2室1厅  55.36平米  南  其他 | 有电梯 高楼层(共9层)2003年建板楼  373人关注  共80次带看 5个月以前发布315万单价56901元距离9号线下沙站766米房本满五年https://image1.ljcdn.com/440300-inspection/5cc9b66a-c261-49d1-ace9-2fd8faf0a282.jpg.280x210.jpg.232x174.jpg
71.05101E+11水木澜山居南向两房客厅赠送大阳台安静08年较新小区水木澜山居梅林 2室1厅  74.23平米  南  简装 | 有电梯 低楼层(共31层)2008年建板塔结合  41人关注  共87次带看 2个月以前发布525万单价70727元距离9号线孖岭站565米房本满五年随时看房https://image1.ljcdn.com/440300-inspection/a0232395-6213-411d-a306-c27d7c77598b.jpg.280x210.jpg.232x174.jpg
这些只是数据的清洗工作。需要按照需要做进一步的转化和抽取。我会在下一篇文章中写出实际的操作。

如有意见,请留言或者联系本人rwangnqian@126.com




  • 9
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
设计目标: 本文旨在设计一个基于大数据的招聘信息实时数据分析系统的数据采集模块的数据清洗功能,使用pandas库进行数据清洗,确保数据准确性和一致性。 设计内容: 1. 数据采集 数据采集是数据清洗的前提,本文采用Python爬虫技术从多个招聘网站上爬取招聘信息数据,获取到的数据包含职位名称、职位描述、薪资待遇、工作地点、公司名称、公司规模等信息。 2. 数据清洗 2.1 缺失值处理数据采集过程中,有些字段可能缺失,需要进行缺失值处理。本文采用pandas库的fillna()函数,将缺失值填充为“未知”。 2.2 数据类型转换 在数据采集过程中,有些字段的数据类型可能不正确,需要进行数据类型转换。比如薪资待遇字段可能是字符串类型,需要转换为数字类型。本文采用pandas库的astype()函数,将字符串类型转换为数字类型。 2.3 数据去重 在数据采集过程中,可能会出现重复的数据,需要进行数据去重。本文采用pandas库的drop_duplicates()函数,对数据进行去重操作。 2.4 数据格式化 在数据采集过程中,有些字段的格式可能不规范,需要进行数据格式化。比如职位描述字段可能包含HTML标签,需要进行去除。本文采用正则表达式对字段进行格式化操作。 2.5 数据归一化 在数据采集过程中,有些字段的数据可能存在大小写不一致的情况,需要进行数据归一化。本文采用pandas库的str.lower()函数,将字符串中的大写字母转换为小写字母,确保数据一致性。 3. 数据存储 数据清洗完成后,需要将数据存储数据库中。本文采用MySQL数据库进行数据存储使用pandas库的to_sql()函数将数据存储数据库中。 设计结构: 数据采集模块的数据清洗功能设计结构如下: 1. 数据采集 2. 数据清洗 2.1 缺失值处理 2.2 数据类型转换 2.3 数据去重 2.4 数据格式化 2.5 数据归一化 3. 数据存储 总结: 本文设计了一个基于大数据的招聘信息实时数据分析系统的数据采集模块的数据清洗功能,使用pandas库进行数据清洗,确保数据准确性和一致性。数据清洗功能设计结构清晰,可为数据分析提供基础数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值