当前位置:首页 > Python > 正文

Python读取CSV文件完全指南 - 从基础到高级技巧

Python读取CSV文件完全指南

掌握多种方法高效处理CSV数据

CSV文件格式简介

CSV(逗号分隔值)是一种简单常用的数据存储格式,具有以下特点:

  • 纯文本格式,兼容性好
  • 每行代表一条数据记录
  • 每行中的字段用逗号分隔
  • 第一行通常是列标题
  • 文件扩展名为.csv

使用Python内置csv模块

1. 基础读取方法

import csv

# 打开CSV文件
with open('data.csv', mode='r', encoding='utf-8') as file:
    # 创建CSV读取器
    csv_reader = csv.reader(file)
    
    # 跳过标题行(如果存在)
    headers = next(csv_reader)
    
    # 逐行读取数据
    for row in csv_reader:
        print(f"行内容: {row}")
        # 访问特定列:row[0] 第一列,row[1] 第二列

2. 读取为字典格式

import csv

with open('data.csv', mode='r', encoding='utf-8') as file:
    # 创建字典读取器
    csv_dict_reader = csv.DictReader(file)
    
    # 遍历每一行(自动跳过标题行)
    for row in csv_dict_reader:
        print(f"姓名: {row['name']}, 年龄: {row['age']}, 城市: {row['city']}")

使用pandas库处理CSV

pandas是Python数据分析的核心库,提供了强大的CSV处理功能。

1. 基础读取方法

import pandas as pd

# 读取CSV文件
df = pd.read_csv('data.csv')

# 显示前5行数据
print(df.head())

# 获取数据概览
print(df.info())

# 获取统计摘要
print(df.describe())

2. 高级参数使用

# 处理各种格式的CSV文件
df = pd.read_csv('data.csv', 
                 sep=',',           # 指定分隔符(默认为逗号)
                 header=0,          # 指定标题行位置
                 names=['列1', '列2', '列3'], # 自定义列名
                 index_col='id',    # 指定索引列
                 dtype={'age': int},# 指定列数据类型
                 parse_dates=['date_column'], # 解析日期列
                 encoding='utf-8',  # 指定编码
                 skiprows=[1, 2],   # 跳过指定行
                 na_values=['NA', 'N/A']) # 指定缺失值标识

处理大型CSV文件的技巧

1. 分块读取(pandas)

# 分块读取大型CSV文件
chunk_size = 10000  # 每块处理的行数
chunks = []

for chunk in pd.read_csv('large_data.csv', chunksize=chunk_size):
    # 对每个数据块进行处理
    processed_chunk = preprocess_data(chunk)
    chunks.append(processed_chunk)

# 合并处理后的数据块
df = pd.concat(chunks, axis=0)

2. 使用csv模块迭代处理

import csv

with open('very_large.csv', 'r') as f:
    reader = csv.DictReader(f)
    
    for row in reader:
        # 逐行处理数据,内存占用低
        process_row(row)

最佳实践总结

  • 对于简单需求,使用Python内置的csv模块
  • 对于数据分析任务,优先选择pandas库
  • 处理大型文件时,使用分块读取或逐行处理
  • 始终指定文件编码(推荐utf-8)
  • 处理用户提供的CSV文件时,注意异常处理
  • 使用csv.Sniffer检测文件格式(如分隔符)

发表评论