如何使用 Pandas 清洗二手房数据并存储文件

news2025/1/8 18:24:41

目录

一、实战场景

二、知识点

python 基础语法

python 文件读写

pandas 数据清洗

三、菜鸟实战

清洗前的文件

读取源文件

对二手房数据进行清洗

清洗完成后保存到文件

运行结果

运行截图

结果文件


一、实战场景

如何使用 Pandas 清洗的二手房数据并存储文件

二、知识点

python 基础语法

python 文件读写

pandas 数据清洗

三、菜鸟实战

清洗前的文件

读取源文件

    def do_clean_data(self):
        # 执行清洗

        clean_data_raw_file_path = self.fileManger.get_data_file_path(self.clean_data_raw_file)

        if not os.path.isfile(clean_data_raw_file_path):
            # 确认文件存在
            self.logger.error("需要清洗的文件不存在")
            print("需要清洗的文件不存在")
            return False

        # 存储清洗数据数组, 先把文件头部存储
        new_row_arr = []

        # 从清洗文件读取需要清洗的数据
        raw_df = pd.read_csv(clean_data_raw_file_path, encoding=self.encoding)

        for idx in tqdm.trange(len(raw_df.values)):
            row = raw_df.values[idx]
            if self.check_row_is_valid(row):
                # 检查 row 的合法性
                new_row = self.clean_row(row)
                new_row_arr.append(new_row)

        # 保存文件
        self.save_to_clean_file(new_row_arr)

对二手房数据进行清洗

from base_cleaner import BaseDataCleaner
import time
import platform


class Tao365Cleaner(BaseDataCleaner):
    # 逐行读取文件,进行数据清洗

    clean_data_raw_file = "tao365_detail.csv"   # 要执行数据清洗的文件
    clean_data_result_file = 'tao365_clean.csv'  # 数据清洗的结果文件
    clean_data_result_file_head = ['标题', '价格', '每平方价格', '小区', '地址', '房屋户型', '建筑面积', '所在楼层', '房屋朝向', '建筑年代', '建成年份', '原始房屋户型']  # 数据清洗的结果文件的头部信息

    def check_row_is_valid(self, raw_row):
        # 检查当前行是否有效
        area = '区' in raw_row[4]
        if area == False:
            return False
        year = '年' in raw_row[9]
        if year == False:
            return False
        return True

    def clean_row(self, raw_row):
        # 执行单行清洗
        # self.logger.info("当前清洗数据: ", raw_row)
        # print(raw_row)
        # 标题
        title = raw_row[0]
        # 价格
        price = self.get_price(raw_row[1])
        # 每平方价格
        avg_price_per_square_meter = self.get_avg_price_per_square_meter(raw_row[2])
        # 小区
        housing = self.get_community(raw_row[3])
        # 地址
        area = self.get_area(raw_row[4])
        # 房屋户型
        house_type = self.get_room_count(raw_row[5])
        house_type_2 = raw_row[5]
        # 建筑面积
        acreage = self.get_area_size(raw_row[6])
        # 所在楼层
        level = self.get_floor(raw_row[7])
        # 房屋朝向
        direction = raw_row[8]
        # 年代
        year = self.get_year(raw_row[9])
        # 建成年份
        time = self.get_house_age(year)
        # 数据转换
        new_row = [title, price, avg_price_per_square_meter, housing, area, house_type, acreage, level, direction, year, time, house_type_2]

        return new_row

    def get_price(self, row):
        # 售价
        price = row.replace('万', '')
        return int(float(price))

    def get_avg_price_per_square_meter(self, row):
        # 每平方米均价
        avg_price_per_square_meter = row.replace('元/m²', '')
        return avg_price_per_square_meter

    def get_area(self, row):
        # 获取属于哪个区
        area = row[:row.index('区')]
        return area + '区'

    def get_community(self, row):
        # 获取属于哪个小区
        return row

    def get_room_count(self, row):
        # 获取房型是几室
        room_count = row[:row.index('室')]
        return room_count

    def get_area_size(self, row):
        # 获取面积
        area_size = row.replace('㎡', '')
        return area_size

    def get_floor(self, row):
        # 获取所属楼层
        floor = row[row.index('/'):]
        return floor.replace('/', '').replace('层', '')

    def get_year(self, row):
        # 获取建筑年代
        return row.replace('年', '')

    def get_house_age(self, row):
        # 获取房屋年龄建筑年代
        localtime = time.localtime(time.time())
        year = int(localtime[0]) - int(row)
        return year

    def test(self):
        # 测试
        raw_row = ['娥眉新村 4层 110平米', '460.4万', '70769元/m²', '北极西村', '玄武区玄武门北极西村21号', '4室1厅2卫', '65㎡', '高楼层/3层', '南北', '2020年']
        print(raw_row)
        new_row = self.clean_row(raw_row)
        print(new_row)


if __name__ == '__main__':
    print("数据清洗开始")

    raw_row = ['娥眉新村 4层 110平米', '460.4万', '70769元/m²', '北极西村', '玄武区玄武门北极西村21号', '4室1厅2卫',
               '65㎡', '高楼层/3层', '南北', '2020年']

    cleaner = Tao365Cleaner()
    # cleaner.test()
    cleaner.do_clean_data()

    print("数据清洗完成")
    print("python 版本", platform.python_version())

清洗完成后保存到文件

    def save_to_clean_file(self, data_arr):
        # 保存到清洗的文件
        file_path = self.fileManger.get_data_file_path(self.clean_data_result_file)

        # 初始化数据
        frame = pd.DataFrame(data_arr)
        frame.columns = self.clean_data_result_file_head
        frame.to_csv(file_path, encoding=self.encoding, index=None)
        self.logger.debug("清洗文件保存完成")

运行结果

运行截图

数据清洗开始
100%|██████████| 9/9 [00:00<?, ?it/s]
数据清洗完成
python 版本 3.9.10

进程已结束,退出代码0

 结果文件 

  菜鸟实战,持续学习!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/146509.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初识结构体(详细版)

目录 一、结构体的声明 1、结构的基础知识 2、结构的声明 3、结构成员的类型 4、结构体变量的定义和初始化 二、结构体成员的访问 1、点操作符访问 2、->操作符访问 3、解引用访问 三、结构体嵌套 四、结构体传参 1、传值调用 2、传址调用 一、结构体的声明 1、结构的基…

Vue2前端路由(vue-router的使用)

一、vue2axiosExpressMySQL实现前后端交互1、后台&#xff1a;&#xff08;1&#xff09;确定MySQL的表格&#xff1a;明确数据库 &#xff08;mvc&#xff09; —- 数据表(ssm_book)&#xff08;2&#xff09;创建Express项目&#xff1a;mysql2、cors、Sequelize(ORM)、nodem…

imx6ull Linux sdk下载验证

本文章是基于整点原子的imx6ull alpha开发板一.Linux SDK源码以及image1.环境准备其他的工具我们就不做介绍了&#xff0c;比如ubuntu ftp,ssh等等&#xff0c;我们主要来介绍下编译链1.1 交叉编译链背景&#xff1a;因为在原子的教程中有强调最新的Linaro gcc编译完uboot后无法…

备受认可!中睿天下荣登“2022创业邦100未来独角兽”年度榜单

近日&#xff0c;由创业邦、复旦大学管理学院主办的2022创业邦100未来独角兽峰会暨创业邦年会在上海举办。在峰会现场&#xff0c;2022创业邦100未来独角兽榜单正式揭晓&#xff0c;中睿天下凭借出众的综合实力荣登榜单。作为一家以“实战对抗”为特点的能力价值型网络安全厂商…

Java版设计模式/设计模式的作用是什么/类之间有哪些关系?又怎么表示

继续整理记录这段时间来的收获&#xff0c;详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用&#xff01; 1. 设计模式概述 1.1 设计模式创始“4人组” ErichGamma–艾瑞克伽马Richard Helm—理查德赫尔码Ralph Johnson----拉尔夫约翰逊John Vlissides—约翰威力斯蒂斯…

【Linux】Linux编译器-gcc/g++的使用和程序执行的基础底层原理

Linux编译器1.gcc/g 的使用2. 程序的基本翻译过程3.预处理3.1验证预处理的功能&#xff08;gcc -E&#xff09;4.编译&#xff08;变成汇编语言&#xff09;4.1验证编译过程&#xff08;gcc -S&#xff09;5.汇编&#xff08;生成机器可识别代码&#xff09;5.1验证汇编过程&am…

K_A11_002 基于STM32等单片机驱动DS18B20串口与OLED0.96双显示

K_A11_002 基于STM32等单片机驱动DS18B20 串口与OLED0.96双显示一、资源说明二、基本参数1.参数2.引脚说明三、驱动说明时序对应程序:四、部分代码说明1、接线说明1.1、STC89C52RCDHT11模块1.2、STM32F103C8T6DHT11模块五、基础知识学习与相关资料下载六、视频效果展示与程序资…

内核解读之内存管理(4)内存管理三级架构之page

我们前面介绍了linux内存管理的三级架构&#xff0c;node->zone->page。本节就来介绍page。 页是内核管理内存的基本单位&#xff0c;体系结构不同&#xff0c;支持的页大小也不尽相同&#xff0c;还有些体系结构甚至支持几种不同的页大小。大多数32位体系结构支持4KB的页…

【Python】爬取弹幕并保存到Excel中

hello&#xff0c;我是李华同学&#xff0c;最近开始学习爬虫&#xff0c;下面是我实现的一个得到弹幕的代码&#x1f60f;找一个URL&#x1f449;想要得到一个网站的内容&#xff0c;首先要找到你想要内容的具体位置&#xff0c;首先你先找到一个有弹幕的地方&#xff0c;找到…

linux系统重装yum工具与python环境

文章目录前言一、强制删除原有环境1.删除python2.删除yum二、安装新环境前置准备三、下载依赖命令1.内核版本7.6.1810下载python依赖包下载yum包2.内核版本7.4.1708下载python依赖包下载yum包3.内核版本7.8.2003下载python依赖包下载yum依赖包4.下载结果四、安装前言 安装之前…

swagger入门

目录 1.前后端分离的特点 2.在没有swagger之前 3.swagger的作用 4.swagger的优点 5.集成swagger 5.1 新建springboot项目 5.2 集成swagger 5.3 开发一个controller用于测试 5.4 启动服务&#xff0c;验证集成效果 6.swagger常用注解 7.swagger使用综合案例 8.会议OA之sw…

第三章 Flink DataStream API

Flink 系列教程传送门 第一章 Flink 简介 第二章 Flink 环境部署 第三章 Flink DataStream API 第四章 Flink 窗口和水位线 第五章 Flink Table API&SQL 第六章 新闻热搜实时分析系统 一、DataStream API是什么&#xff1f; Flink 中的 DataStream 程序是对数据流&a…

Android 深入系统完全讲解(2)

1 系统启动过程、嵌入式系统启动过程 这是我之前画的启动过程的图&#xff0c;这个主要就是给大家讲明白&#xff0c;启动过程整个的流程。 第一个阶段&#xff0c;bootloader 系统在上电的时候&#xff0c;系统会从固定的地方加载一段代码进入内部 ram 进行运行。这段代码 通…

【数学思维】Quasi-convex and quesi-concave

【数学思维】Quasi-convex and quesi-concaveConvex function 定义如下 f(λx(1−λ)y)≤λf(x)(1−λ)f(y)f(\lambda x(1-\lambda)y)\le \lambda f(x)(1-\lambda)f(y) f(λx(1−λ)y)≤λf(x)(1−λ)f(y)Quasi-convex function 定义如下 f(λx(1−λ)y)≤max⁡{f(x),f(y)}f(\l…

【阶段三】Python机器学习01篇:机器学习概念、机器学习类别、机器学习应用场景与机器学习基本技术:特征、标签、模型

本篇的思维导图: 机器学习概念 机器学习是AI人工智能的分支技术,而深度学习是机器学习的重要分支。 人工智能、机器学习、深度学习三者的关系 机器学习就是从数据中发现规律,机器学习的关键内涵之一在于利用计算机的运算能力从大量的数据中发现一个“函数”或…

Linux——VMware Tools的介绍及安装方法

一、VMware Tools的作用 1.最大的好处是可以直接把windows界面的文件拖进linux虚拟机内。 2.鼠标可以直接从虚拟机移动到windows等等好处。 二、VMware Tools的安装步骤 1.首先把linux虚拟机关机或退出&#xff0c;然后点击“编辑虚拟机设置”。 2.点击CD/DVD&#xff0c;…

电子、半导体废水深度除氟、除重金属的技术详解

电子半导体行业废水来源及水质特点电子废水主要是印刷线路板中每个环节产生的废水&#xff0c;如线路板上的赋铜线路、电子元器件、二极管、三极管、电容等&#xff0c;日常生活中常见的就是电脑元器件&#xff0c;如内存条、CPU、主板等。这些东西在生产成型的过程中主要通过电…

968. 监控二叉树

题目 分析 首先明确把摄像头放在叶子节点的父节点位置&#xff0c;才能充分利用摄像头的覆盖面积。 贪心算法&#xff1a; 从下到上看局部最优&#xff0c;因为下面的节点最多&#xff0c;让叶子节点的父节点安摄像头最合理&#xff0c;所用摄像头最少。 整体全局最优&#xf…

基于融合SPD+BIFPN+CBAM改进YOLOv5的奶牛检测识别分析系统开发

在我之前的几篇文章中分别应用了不同的tricks来改进yolov5模型如下&#xff1a;加入针对小目标的SPD-Conv模块《yolov5s融合SPD-Conv用于提升小目标和低分辨率图像检测性能实践五子棋检测识别》加入BIFPN特征融合模块《基于yolov5sbifpn实践隧道裂缝裂痕检测》加入注意力机制模…

[数据结构]栈和队列

目录[数据结构]栈和队列一.栈1.栈的基本概念1.2 栈的常见基本操作1.3 栈的实现1.3.1 入栈1.3.2 出栈1.3.3获取栈顶元素1.3.4 判断栈为空1.3.5 栈实现二.队列2.1 入队2.2 出队2.3 获取队首元素2.4 实现队列[数据结构]栈和队列 一.栈 1.栈的基本概念 栈&#xff08;Stack&#…