本文目录导读:

操作大型CSV文件时,核心原则是避免一次性将所有数据加载到内存中,以下是几种Python处理大CSV文件的方案:
使用Pandas分块读取(最常用)
import pandas as pd
# 分块读取,chunksize指定每批读取的行数
chunk_size = 10000
chunks = []
for chunk in pd.read_csv('large_file.csv', chunksize=chunk_size):
# 处理每个分块
# 过滤、计算、转换
processed = chunk[chunk['column'] > 100] # 示例过滤
chunks.append(processed)
# 如果需要合并结果
result = pd.concat(chunks)
逐行处理(避免内存占用)
for chunk in pd.read_csv('large_file.csv', chunksize=chunk_size):
# 处理完直接写入新文件,不保留在内存
chunk.to_csv('output.csv', mode='a', header=False, index=False)
使用Python内置csv模块
import csv
with open('large_file.csv', 'r') as infile, open('output.csv', 'w', newline='') as outfile:
reader = csv.reader(infile)
writer = csv.writer(outfile)
# 读取表头
header = next(reader)
writer.writerow(header)
# 逐行处理
for row in reader:
# 处理逻辑
if float(row[2]) > 100: # 示例:筛选第三列大于100的行
writer.writerow(row)
使用Dask(分布式计算)
import dask.dataframe as dd
# 按分区读取(自动分块)
df = dd.read_csv('large_file.csv', blocksize='100MB')
# 延迟计算
result = df[df['value'] > 100].compute()
按列选择性读取
# Pandas只读取需要的列
df = pd.read_csv('large_file.csv', usecols=['col1', 'col3', 'col5'])
# 指定数据类型以减少内存
dtype_dict = {'col1': 'int32', 'col2': 'float32'}
df = pd.read_csv('large_file.csv', dtype=dtype_dict)
处理超大型文件(GB级别)
# 方式一:生成器逐行处理
def process_large_csv(file_path):
with open(file_path, 'r') as f:
header = f.readline().strip().split(',')
yield header
for line in f:
row = line.strip().split(',')
# 处理每一行
yield row
# 使用
for row in process_large_csv('huge_file.csv'):
# 逐行处理,内存占用极低
pass
性能优化技巧
import csv
from itertools import islice
# 1. 只读取前N行预览
preview = pd.read_csv('large.csv', nrows=100)
# 2. 跳过不需要的行
df = pd.read_csv('large.csv', skiprows=lambda x: x % 2 == 0) # 偶数行
# 3. 多进程处理
from multiprocessing import Pool
import pandas as pd
def process_chunk(chunk_file):
df = pd.read_csv(chunk_file)
# 处理逻辑
return df
# 先将大文件分割成小文件
# 然后用Pool并行处理
实际案例:合并多个大CSV文件
import pandas as pd
import glob
chunk_size = 50000
output_file = 'merged.csv'
# 写入表头
first = True
for file in glob.glob('data_*.csv'):
for chunk in pd.read_csv(file, chunksize=chunk_size):
chunk.to_csv(output_file, mode='a',
header=first, index=False)
first = False
选择建议
| 场景 | 推荐方法 |
|---|---|
| 数据量<1GB,需要复杂分析 | Pandas分块 |
| 数据量1-10GB,简单转换 | csv模块逐行 |
| 数据量>10GB | Dask或生成器 |
| 需要并行处理 | Pool + csv |
| 只需要统计信息 | 流式计算(逐行统计) |
核心原则:永远不要用 pd.read_csv() 不加参数读取大文件,这会试图将所有数据加载到内存中。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播