Python基础教程

第一章: 环境搭建,安装Python

第二章: 挑选一款趁手的IDE

第三章: 计算机基础知识

第四章: 命令行基础知识

第五章: 从全局把握Python

第六章: Python语言基础

第七章: Python流程控制

第八章: Python数据类型与运算

第九章: Python字符串类型

第十章: Python列表类型

第十一章: Python元组类型

第十二章: Python字典类型

第十三章: Python集合类型

第十四章: Python函数处理

第十五章: Python文件处理

第十六章: Python面向对象

第十七章: Python异常处理

第十八章: Python模块处理

第十九章: Python高级编程

第二十章: Python项目实战

首页 > Python基础教程 > 第十五章: Python文件处理 > 15.6节: 程序实战-数据清洗CSV文件

15.6节: 程序实战-数据清洗CSV文件

薯条老师 2022-12-07 11:45:31 23680 0

编辑 收藏

广州番禺Python, Java小班周末班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6

15.6.1 什么是CSV文件?

CSV文件由任意数目的记录组成,记录间以换行符进行分隔。每条记录由字段组成,字段之间通常以英文逗号或水平制表符进行分隔。下图所示的即是一个CSV文件:

1670385693762.png

同学们需注意,在用wps等办公软件打开时,会自动将分隔符去掉,并将每一个字段以及数据保存在网格单元中。

15.6.2 Python内置的csv模块

使用Python内置的csv模块就可以读写csv文件,只需将文件流对象作为参数传递给csv模块对应的读写器。对于读操作,在构造好文件流对象以后,将其传递给csv模块的reader方法,然后在for循环中遍历每一条记录:

import csv
csv_file = "brand_statistics.csv"
with open(csv_file) as f:
    # 将文件流对象传递给Reader
    reader = csv.reader(f)
    for record in reader:
        # record是一个列表,通过[]+索引来访问每条记录中的字段
        print(record[0], record[1])

对于写操作,在构造好文件流对象以后,将其传递给csv模块的writer方法,然后通过writerow方法写入每一条记录或通过writerows方法批量写入所有记录:

import csv
csv_file = "data.cleaned.csv"
with open(csv_file, "w") as f:
    # 将文件流对象传递给Reader
    writer = csv.writer(f)
    # 每次写入一条记录,如需批量写入,可调用writerows方法
    writer.writerow(["", ""])

15.6.3 对csv文件进行数据清洗

我们现在来写一个非常简单的程序,将CSV文件中的数据进行去重,然后保存到一个新的csv文件。CSV文件内容如下图所示:

1670385693762.png

在以上CSV文件中,将具有相同的brand_id, category_id, sells, statistics_date值的记录视为重复值。实现去重的逻辑很简单,将这四个字段的值拼接起来然后存储在集合中。如果某条记录有重复值,那么由这四个字段拼接起来的键必然存在于集合中。

"""
@author: 薯条老师
@desc: 对csv文件进行数据清洗
"""

import csv

def clean_csv_data(csv_file_path, new_csv_file, fields_indices, ):
    """
    :param csv_file_path: csv文件的路径
    :param new_csv_file: 数据清洗后保存的csv文件
    :param fields_indices: 重复值的字段索引
    """
    def __get_value(record):
        value = ""
        for index in fields_indices:
            value += record[index]
        return value
        
    duplicate_set = set()
    rows = []
    with open(csv_file_path) as f:
        reader = csv.reader(f)
        for record in reader:
            value = __get_value(record)
            # 如果value已存在,就说明该条记录是重复值,则不添加至rows列表中
            if value in duplicate_set:
                continue
            duplicate_set.add(value)
            rows.append(record)
            
    with open(new_csv_file, "w", newline='') as f:
        writer = csv.writer(f)
        # 批量写入csv文件
        writer.writerows(rows)
        
        
if __name__ == "__main__":
    csv_file = "brand_statistics.csv"
    csv_file_cleaned = "brand_statistics.cleaned.csv"
    # brand_id, category_id, sells, statistics_date对应的索引分别为1,2,3,4
    clean_csv_data(csv_file, csv_file_cleaned, [1, 2, 3, 4])

15.6.4 最具实力的小班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。

(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,免费领取课程大纲
(3) Java后端开发工程师高薪就业班,月薪11K-20K, 免费领取课程大纲
(4) Python大数据分析,量化投资就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取Python学习资料:


欢迎 发表评论: