Como usar o Pandas para limpar dados de imóveis usados e armazenar arquivos

Índice

1. Cena de combate real

2. Pontos de conhecimento

sintaxe básica do python

Arquivo Python lido e gravado

limpeza de dados pandas

3. Combate real de novato

Arquivos antes da limpeza

ler arquivo fonte

Limpe os dados de habitação em segunda mão

Salvar em arquivo após a limpeza

resultado da operação

executar captura de tela

arquivo de resultado


1. Cena de combate real

Como usar os dados de habitação de segunda mão limpos por Pandas e armazenar arquivos

2. Pontos de conhecimento

sintaxe básica do python

Arquivo Python lido e gravado

limpeza de dados pandas

3. Combate real de novato

Arquivos antes da limpeza

ler arquivo fonte

    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)

Limpe os dados de habitação em segunda mão

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())

Salvar em arquivo após a limpeza

    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("清洗文件保存完成")

resultado da operação

executar captura de tela

Limpeza de dados iniciada
100%|██████████| 9/9 [00:00<?, ?it/s]
Limpeza de dados concluída
python versão 3.9.10

Processo finalizado com código de saída 0

 arquivo de resultado 

link de recurso 

https://download.csdn.net/download/qq_39816613/87374646

Combate real novato, continue aprendendo!

Acho que você gosta

Origin blog.csdn.net/qq_39816613/article/details/128590710
Recomendado
Clasificación