1、代码如下
import pandas as pd
import numpy as np
import re
f=open('bjlianjiawang.csv','r',encoding='utf-8')
data=pd.read_csv(f,encoding='uft-8',sep='|',header=None,names=('fangzi','jiage','danjia','fangzishu','chaoxiang','mianji','jianzaoshijian','xiaoqu','weizhi','fangjianzongshu','fangling'))
f.close()
# 输出房间总数 和 fangling的默认值
data['fangjianzongshu']=np.nan
data['fangling']=np.nan
# 数据治理 1:计算总的房间数 = 室数 + 厅数
def zhili01(line):
re_obj = re.compile(r'\d+') # 创建正则表达式对象
res_list = re_obj.findall(line) # 利用findall将找到的符合要求的放到列表中
num_list = list(map(int,res_list)) # map方法,是列表中的元素按照指定那个方式转变
if (len(num_list)>0):
return sum(num_list)
else:
return np.nan
data['fangjianzongshu'] = data['fangzishu'].apply(zhili01)
# 治理2:计算房龄 2021 - 建造年份
def zhili02(line):
re_obj=re.compile(r'\d+')
res_list=re_obj.findall(line)
num_list=list(map(int,res_list))
if (len(num_list)>0):
return 2021-num_list[0]
else:
return np.nan
data['fangling'] = data['jianzaoshijian'].apply(zhili02)
# 数据治理3 :把房屋的面积的非数字部分去掉 117.21平米
def zhili03(line):
re_obj=re.compile(r'\d+')
res_list=re_obj.findall(line)
num_list=list(map(int,res_list))
if (len(num_list)>0):
return num_list[0]
else:
return np.nan
data['mianji']=data['mianji'].apply(zhili03)
# 数据治理4: 删除房间总数是空,或者 房龄为空的行,或者面积为空的字段
data.dropna(axis=0,how='any',inplace=True)
# 数据治理完毕,存入另外的文件
data.to_csv('lianjia_zhili.csv',index=False)
2、运行结果: