python学习-处理csv文档
本文介绍 python 如何处理
CSV
文档,包括 CSV 文件的介绍、安装依赖、创建并写入 CSV 文件、读取 CSV 文件、高级功能、Pandas 库处理 CSV、性能优化等。供自己以后查漏补缺,也欢迎同道朋友交流学习。
引言
上面几篇文章,主要介绍了 Python
处理 word
、PDF
和 excel
的文档,在处理大量数据和数据库文件时,需要使用 CSV
文件。
因此,本章主要介绍 Python 如何处理 CSV
文档,包括 CSV 文件的介绍、安装依赖、创建并写入 CSV 文件、读取 CSV 文件、高级功能、Pandas 库处理 CSV、性能优化等。
CSV文件介绍
CSV文件及其结构
CSV
(Comma-Separated Values
,逗号分隔值)文件是一种简单的文本格式,用于存储表格数据
,如电子表格
或数据库
。
CSV
文件由纯文本
组成,其中的数据通常是以逗号分隔
的值。每一行代表数据表中的一行
,而每一行中的数据项则由逗号分隔。
CSV
文件的结构简单,易于阅读
和编写
,同时也易于被各种程序处理
。
一个典型的 CSV
文件结构如下所示:
姓名,年龄,城市
张三,30,南京
李四,25,北京
王五,35,上海
CSV常见用途
CSV
文件因其简单性和灵活性而被广泛使用。以下是一些常见的用途:
- 数据交换:常用于不同程序或系统之间的
数据交换
,因为它可以被大多数电子表格
软件和数据库
系统轻松读取和写入。 - 数据备份:可以作为数据库或电子表格数据的备份格式,方便数据的存储和传输。
- 数据分析:数据分析工具和编程语言(如Python、R)可以轻松读取,进行
数据分析和处理
。 - 报告生成:可以作为报告的一部分,提供数据的
快照
,方便用户查看和分析。
安装依赖
csv 是 python 的内置模块,不需要额外安装,但我们处理数据,经常要用到 pandas 库:
pip install pandas
# or
pip3 install pandas
创建并写入CSV文件
csv 模块提供了 csv.writer
类,允许将数据写入 CSV 文件:
- 打开文件:使用
open()
函数以写入模式打开一个文件。 - 创建csv.writer对象:使用
csv.writer()
创建一个写入器对象。 - 写入数据:使用
writerow()
方法写入单行数据,或使用writerows()
方法写入多行数据。
import csv
# 表头数据
headers = ['姓名', '年龄', '城市']
# 数据
rows = [
['张三', 25, '北京'],
['李四', 30, '上海'],
['王五', 28, '广州']
]
# 写入CSV文件
with open('csv-1.csv', 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.writer(csvfile)
# 写入表头
writer.writerow(headers)
# 写入数据
writer.writerows(rows)
读取CSV文件
csv 模块提供了 csv.reader
类,允许逐行读取 CSV 文件中的数据。
import csv
# 写入CSV文件
with open('csv-1.csv', 'r', encoding='utf-8') as csvfile:
reader = csv.reader(csvfile)
# 读取第一行数据(表头)
headers = next(reader)
# 读取剩余行数据
rows = [row for row in reader]
# 打印表头和数据
print(headers)
# 输出:['姓名', '年龄', '城市']
print(rows)
# 输出:[['张三', '25', '北京'], ['李四', '30', '上海'], ['王五', '28', '广州']]
读取CSV文件到字典
将 CSV 文件读取到字典中,可以使用 csv.DictReader
类,将每行数据读取为一个字典
,其中键是列名。
import csv
# 写入CSV文件
with open('csv-1.csv', 'r', encoding='utf-8') as csvfile:
reader = csv.DictReader(csvfile)
#创建一个列表来存储数据
data = [row for row in reader]
# 打印数据
for item in data:
print(item)
# 输出:
# {'姓名': '张三', '年龄': '25', '城市': '北京'}
# {'姓名': '李四', '年龄': '30', '城市': '上海'}
# {'姓名': '王五', '年龄': '28', '城市': '广州'}
Pandas处理CSV
Pandas库
pandas
是一个强大的数据分析库,提供了丰富的数据处理功能。它提供了DataFrame
数据结构,允许以表格形式处理数据,并且提供了许多方便的方法来处理和分析数据。
pandas
库的主要优势包括:
- 高性能:内部使用
C
语言和NumPy
库,这使得它在处理大型数据集时非常快速。 - 易用性:提供了直观的
API
,使得数据操作变得简单。 - 自动对齐:在处理数据时,
pandas
会自动对齐
数据,这使得数据合并
、连接
等操作变得容易。 - 丰富的数据操作功能:提供了大量的
数据操作
功能,包括数据筛选
、排序
、分组
、聚合
等。 - 灵活的数据合并:支持多种数据合并方式,如
merge
、join
和concat
。 - 时间序列功能:提供了强大的
时间序列
功能,包括时间序列索引
和日期范围生成器
。 - 数据可视化:可以与
matplotlib
等可视化库集成,方便地进行数据可视化。
使用pandas
- 读取CSV文件: 使用
pandas.read_csv()
读取 CSV 文件 - 写入CSV文件: 使用
pandas.DataFrame.to_csv()
写入 CSV 文件
import pandas
# 使用pandas读取CSV文件
df = pandas.read_csv('csv-1.csv')
# 显示DataFrame
print(df)
# 输出:
# 姓名 年龄 城市
# 0 张三 25 北京
# 1 李四 30 上海
# 2 王五 28 广州
# 使用pandas写入CSV文件
df.to_csv('csv-2.csv', index=False)
高级CSV处理技巧
使用csv.DictWriter写入CSV
import csv
# 要写入的数据
data = [
{'姓名': '张三', '年龄': '25', '城市': '北京'},
{'姓名': '李四', '年龄': '30', '城市': '上海'},
{'姓名': '王五', '年龄': '28', '城市': '广州'}
]
# 写入CSV文件
with open('csv-3.csv', 'w', encoding='utf-8', newline='') as csvfile:
# 获取表头(字典的键)
headers = list(data[0].keys())
writer = csv.DictWriter(csvfile, fieldnames=headers)
# 写入表头
writer.writeheader()
# 写入数据行
writer.writerows(data)
使用pandas进行数据筛选、排序和聚合
pandas
提供了强大的数据操作功能,包括筛选、排序和聚合。
import pandas as pd
# 读取CSV文件
df = pd.read_csv('csv-1.csv')
# 数据筛选
# 筛选年龄大于30的行
filtered_df = df[df['年龄'] > 26]
# 输出筛选结果
print(filtered_df)
# 输出:
# 姓名 年龄 城市
# 1 李四 30 上海
# 2 王五 28 广州
# 数据排序
# 按年龄升序排序
sorted_df = df.sort_values('年龄')
# 输出排序结果
print(sorted_df)
# 输出:
# 姓名 年龄 城市
# 0 张三 25 北京
# 2 王五 28 广州
# 1 李四 30 上海
# 数据分组
# 按城市分组,并计算每个城市的平均年龄
grouped_df = df.groupby('城市')['年龄'].mean()
# 输出分组结果
print(grouped_df)
# 输出:
# 城市
# 北京 25.0
# 上海 30.0
# 广州 28.0
# Name: 年龄, dtype: float64
# 数据统计
# 计算年龄的总和、平均值、最大值和最小值
stats = df['年龄'].agg(['sum', 'mean', 'max', 'min'])
# 输出统计结果
print(stats)
# 输出:
# sum 83.000000
# mean 27.666667
# max 30.000000
# min 25.000000
# Name: 年龄, dtype: float64
性能优化
处理大型 CSV
文件时,性能问题是一个重要的考虑因素:
- 内存消耗:大型 CSV 文件可能会占用
大量内存
,特别是当整个文件被一次性读入内存时。 - 处理时间:文件越大,读取和处理数据所需的时间就
越长
。 - 磁盘I/O:频繁的磁盘读写操作会显著
降低
处理速度。 - 数据过滤和转换:在大型数据集上执行
复杂
的数据过滤和转换
操作可能会非常耗时。
为了优化性能,可以采取以下措施:
- 使用分块处理:使用
chunksize
来将文件分成多个块,逐块处理数据,减少内存消耗。 - 仅读取必要的列:使用
usecols
读取必要的列
,而不是整个文件。 - 使用合适的数据类型:使用
dtype
选择合适的数据类型,以减少内存占用。 - 利用向量化操作:
pandas
提供了向量化
操作,这比循环遍历数据行要快得多。 - 并行处理:对于可以并行处理的任务,使用
多线程
或多进程
可以显著提高性能,使用multiprocessing
库可以轻松实现并行处理。 - 优化数据存储格式:考虑使用更高效的数据存储格式,如
Parquet
或HDF5
,这些格式在读写时比CSV
更高效,特别是对于大型数据集
。
python学习专栏系列
- python学习-基础学习1
- python学习-基础学习2
- python学习-基础学习3
- python学习-面向对象编程1
- python学习-面向对象编程2
- python学习-文件读写
- python学习-程序异常处理
- python学习-正则
- python学习-处理word文档
- python学习-处理pdf文档
- python学习-处理excel文档
- python学习-处理csv文档
- python学习-使用matplotlib绘制图表
- python学习-处理JSON数据
- python学习-SQLite数据库
- python学习-多线程处理
- python学习-网络爬虫