编写高性能数据处理代码 01

⚠️ 注意,这是一篇软件技术文章,非软件开发者/爱好者 😜😜😜 慎入

各位python开发者/爱好者,我是 Pythonista,爱写优雅的python代码!

在AI飞速发展的今天数据科学占据了极高的地位,编写高效的 Python 代码成为一项重要的技能。

作为数据科学家,我们经常处理复杂的工作流程,在 Pandas 和 NumPy 等库之间切换以进行数据整理,使用 SQL 进行查询,以及使用 regex 进行数据清理和特征提取。

以上四种工具都是常用的,因此,了解更多关于它们的信息总是有用的。

在本文中介绍并行I/O分块读取和处理,这肯定能提升您在 Pandas方面的技能。

"Talk is cheap. Show the code",开干!

python 复制代码
# 以1000000行为每块大小,处理 10GB 的 CSV 文件,并即时进行聚合
agg = []
for chunk in pd.read_csv('big.csv', usecols=['user_id','purchase_amt'], chunksize=10**6):
    agg.append(chunk.groupby('user_id')['purchase_amt'].sum())
result = pd.concat(agg).groupby(level=0).sum()

工作原理:

  • usecols 在 I/O 层跳过解析不必要的列,从而减少内存开销。
  • chunksize 将数据分批流式传输,以避免 OOM 异常。

在 Pandas 中,read_csv() 的参数 usecols 和 chunksize 经常配合使用,用于按块(chunk)读取大型 CSV 文件,提高内存效率,并可以实现并行 I/O 或流式处理。这在处理大文件时非常重要,尤其是在无法一次性读入整个文件的情况下。

基本概念解释

✅ usecols

  • 含义:指定只读取某些列(column)。
  • 作用:减少内存占用,加快读取速度。

✅ chunksize

  • 含义:分块读取,每次读取指定行数,返回的是一个可迭代的 TextFileReader 对象。
  • 作用:避免一次性读取大文件造成内存爆炸。

✅ 并行 I/O 的含义(手动实现)

  • 虽然 Pandas 本身不自动并行处理 chunk,但你可以结合 Python 的多线程或多进程来并行处理每个 chunk,从而实现并行 I/O + 计算。

⚙️ 并行处理 Chunk(可选)

可以使用 concurrent.futures 来并行处理每个 chunk:

python 复制代码
from concurrent.futures import ThreadPoolExecutor
import pandas as pd

def process_chunk(chunk):
    chunk['value'] = chunk['value'] ** 2
    return chunk

reader = pd.read_csv('data.csv', usecols=['id', 'value'], chunksize=10000)

with ThreadPoolExecutor(max_workers=4) as executor:
    results = list(executor.map(process_chunk, reader))

# 合并结果
df_all = pd.concat(results)

总结:

参数 作用 场景
usecols 只读取指定列,节省内存 只关心部分字段,避免加载无用数据
chunksize 分块读取大文件,返回 chunk 流 文件太大,无法一次读入
并行处理 提高读取 + 处理的整体效率 多核环境下处理大数据
相关推荐
vipxieliang14 小时前
ValidX 的 Date 和 DateTime vs JPA 的 Temporal 对比
java·后端
触底反弹14 小时前
🔥 从「为什么」到「怎么用」:TypeScript 类型约束与泛型完全指南
后端·面试·typescript
用户83562907805115 小时前
使用 Python 查找和替换 Word 文档中的文本
后端·python
Java编程爱好者15 小时前
Spring Boot 实现数据脱敏:自定义注解 + Jackson 序列化器
后端
神奇小汤圆15 小时前
从 ☕️Java Spring Boot → 🦀Rust Axum 体验的真实感受
后端
黑马水牛15 小时前
Carla仿真系列:9_Carla 单目障碍物测距,四种方法原理与实测
经验分享·python·深度学习·计算机视觉·ros·传感器·carla仿真
Python私教15 小时前
多个项目怎么安全合并?适配层、双轨验证与可回滚切换
python·软件架构·系统迁移
掘金者阿豪15 小时前
Codex 开放 1M 上下文后,我折腾了一圈才发现:新版根本不是网上教的那样配置
后端
船厂电气自动化ai大模型16 小时前
AI大模型与数学第42课:泰勒级数完整展开(神经网络近似核心)
人工智能·python·深度学习·算法·机器学习
爱勇宝16 小时前
《道德经》第 10 章:真正成熟的人,能成事但不控制一切
前端·后端·程序员