Python作为数据处理领域的主流编程语言,提供了多种读取CSV文件的方式,不同的方式在性能、功能、使用复杂度上各有差异,开发者可以根据实际需求选择合适的读取形式。

使用标准库csv模块读取CSV
csv是Python内置的标准库,无需额外安装,适合轻量级的CSV读取场景,支持逐行读取,内存占用较低。
逐行读取CSV内容
使用csv.reader可以直接逐行读取CSV文件,每一行的内容会以列表形式返回。
import csv
# 打开CSV文件,指定编码为utf-8避免中文乱码
with open('test.csv', 'r', encoding='utf-8') as f:
reader = csv.reader(f)
# 遍历每一行内容
for row in reader:
print(row)
读取为字典形式
如果需要将CSV的列名作为键,每行内容作为值,可以使用csv.DictReader,返回的是字典迭代器。
import csv
with open('test.csv', 'r', encoding='utf-8') as f:
# 使用DictReader读取,自动将第一行作为键
dict_reader = csv.DictReader(f)
for row in dict_reader:
# row是字典类型,键为列名,值为对应行的列内容
print(row)
使用pandas库读取CSV
pandas是Python数据分析的核心库,读取CSV的功能非常强大,支持自动解析数据类型、处理缺失值、指定分隔符等,适合复杂的数据分析场景。
基础读取方式
使用pandas.read_csv方法可以直接将CSV读取为DataFrame格式,方便后续的数据处理和分析。
import pandas as pd
# 读取CSV文件,默认第一行为列名
df = pd.read_csv('test.csv', encoding='utf-8')
# 查看前5行数据
print(df.head())
# 查看数据的基本信息
print(df.info())
自定义读取参数
pandas的read_csv支持大量参数,可以适配不同的CSV格式,比如指定分隔符、跳过指定行、处理缺失值等。
import pandas as pd
# 读取分隔符为|的CSV,跳过前2行,将空值填充为0
df = pd.read_csv(
'test.csv',
encoding='utf-8',
sep='|', # 指定分隔符为竖线
skiprows=2, # 跳过前2行
na_values=['NULL'], # 将NULL识别为缺失值
fillna=0 # 缺失值填充为0
)
print(df)
使用numpy库读取CSV
numpy是Python数值计算的基础库,读取CSV的速度较快,适合读取纯数值类型的CSV文件,返回的是numpy数组。
import numpy as np
# 读取CSV文件,分隔符为逗号,数据类型为浮点型
data = np.genfromtxt('test.csv', delimiter=',', dtype=float, encoding='utf-8')
print(data)
# 如果CSV包含表头,可以跳过第一行
data = np.genfromtxt('test.csv', delimiter=',', dtype=float, skip_header=1, encoding='utf-8')
print(data)
不同读取形式的对比
三种常见的CSV读取方式各有适用场景,具体差异如下:
| 读取方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| csv模块 | 无需额外安装,内存占用低,轻量灵活 | 功能较少,需要手动处理数据类型和缺失值 | 轻量级读取、逐行处理、内存受限场景 |
| pandas | 功能强大,自动处理数据类型,支持复杂数据操作 | 需要安装第三方库,内存占用相对较高 | 数据分析、复杂数据处理、需要快速清洗数据的场景 |
| numpy | 读取速度快,适合数值计算 | 仅支持数值类型,功能单一 | 读取纯数值CSV、后续进行数值计算的场景 |
注意事项
- 读取CSV时一定要注意编码问题,中文内容建议优先使用utf-8编码,避免出现乱码。
- 如果CSV文件较大,优先选择csv模块逐行读取,避免一次性加载全部数据导致内存溢出。
- 如果需要进行复杂的数据分析操作,优先选择pandas,能大幅减少后续数据处理的代码量。