人工智能之数据分析 Pandas:第九章 性能优化

人工智能之数据分析 Pandas

第九章 性能优化


文章目录

  • [人工智能之数据分析 Pandas](#人工智能之数据分析 Pandas)
  • 前言
  • [1. 使用合适的数据类型](#1. 使用合适的数据类型)
  • [2. 避免链式赋值](#2. 避免链式赋值)
  • [3. 向量化操作](#3. 向量化操作)
  • [4. 利用 `apply()` 函数](#4. 利用 apply() 函数)
  • [5. 分块读取大文件](#5. 分块读取大文件)
  • [6. 使用 `eval()` 和 `query()`](#6. 使用 eval()query())
  • [7. 删除不必要的列和行](#7. 删除不必要的列和行)
  • [8. 设置适当的索引](#8. 设置适当的索引)
  • [9. 并行处理](#9. 并行处理)
  • 结论
  • 后续
  • 资料关注

前言

Pandas 是一个功能强大的 Python 数据分析库,它提供了高效的数据结构和数据分析工具。然而,在处理大规模数据集时,Pandas 的性能可能成为瓶颈。为了优化 Pandas 的性能,本文提供了一些关键策略和技术:

1. 使用合适的数据类型

  • 选择更有效的数据类型 :例如,将整数类型的列转换为 Int8, Int16, Int32, 或 Int64 类型(取决于你的数据范围),可以减少内存使用。同样,对于分类数据,使用 category 类型而不是 object

    python 复制代码
    df['column'] = df['column'].astype('category')
  • 日期时间数据 :确保日期时间数据被正确解析为 datetime 类型,这样可以利用 Pandas 对日期时间的内置优化。

2. 避免链式赋值

链式赋值(chained assignment)可能导致意想不到的行为,并且通常比直接赋值慢。尽量避免使用如下方式:

python 复制代码
df['column']['subcolumn'] = value  # 不推荐

取而代之的是直接访问或使用 .loc / .iloc

python 复制代码
df.loc[row_index, 'column'] = value  # 推荐

3. 向量化操作

尽可能使用向量化操作代替循环。Pandas 和 NumPy 库针对向量操作进行了优化,使得它们比纯 Python 循环更快。

python 复制代码
# 不推荐
for i in range(len(df)):
    df.iloc[i]['A'] = df.iloc[i]['B'] + df.iloc[i]['C']

# 推荐
df['A'] = df['B'] + df['C']

4. 利用 apply() 函数

虽然 apply() 比纯循环快,但它仍不如向量化操作高效。当必须使用自定义函数时,优先考虑 apply() 而非循环。

python 复制代码
df['new_column'] = df.apply(lambda row: some_function(row['A'], row['B']), axis=1)

5. 分块读取大文件

如果需要处理非常大的 CSV 文件,可以使用 chunksize 参数分块读取文件。

python 复制代码
chunksize = 10 ** 6
for chunk in pd.read_csv('filename.csv', chunksize=chunksize):
    process(chunk)

6. 使用 eval()query()

Pandas 提供了 eval()query() 方法,它们能够对 DataFrame 进行快速的字符串表达式求值。这些方法在内部使用了优化过的计算引擎。

python 复制代码
df.query('A > B')  # 查询
pd.eval('df.A + df.B')  # 计算

7. 删除不必要的列和行

处理大型数据集时,尽早删除不必要的列和行可以节省大量内存并加快运算速度。

python 复制代码
df.drop(['unnecessary_column'], axis=1, inplace=True)

8. 设置适当的索引

合理设置索引(Index)可以加速查找和过滤操作。例如,如果你频繁基于某一列进行查询,可以将其设为索引。

python 复制代码
df.set_index('column_name', inplace=True)

9. 并行处理

虽然 Pandas 本身不支持并行处理,但你可以结合其他库如 Dask 或 Modin 来实现这一点。Dask 提供了与 Pandas 相似的 API,但是支持并行计算和分布式存储。

python 复制代码
import dask.dataframe as dd
df = dd.read_csv('filename.csv')

结论

通过上述技术,在许多情况下可以显著提高 Pandas 的性能。重要的是要理解业务数据以及需要执行的操作,以便选择最适合的技术。

后续

python过渡项目部分代码已经上传至gitee,后续会逐步更新。

资料关注

公众号:咚咚王

gitee:https://gitee.com/wy18585051844/ai_learning

《Python编程:从入门到实践》

《利用Python进行数据分析》

《算法导论中文第三版》

《概率论与数理统计(第四版) (盛骤) 》

《程序员的数学》

《线性代数应该这样学第3版》

《微积分和数学分析引论》

《(西瓜书)周志华-机器学习》

《TensorFlow机器学习实战指南》

《Sklearn与TensorFlow机器学习实用指南》

《模式识别(第四版)》

《深度学习 deep learning》伊恩·古德费洛著 花书

《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》

《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》

《自然语言处理综论 第2版》

《Natural-Language-Processing-with-PyTorch》

《计算机视觉-算法与应用(中文版)》

《Learning OpenCV 4》

《AIGC:智能创作时代》杜雨+&+张孜铭

《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》

《从零构建大语言模型(中文版)》

《实战AI大模型》

《AI 3.0》

相关推荐
bluetata几秒前
Spring AI 使用 AWS Amazon Nova 模型
人工智能·spring·aws
audyxiao0019 分钟前
智慧医疗顶会MICCAI 2025获奖论文精彩看点
人工智能·智慧医疗顶会·miccai
Android技术之家10 分钟前
2025年度Android行业总结:AI驱动生态重构,跨端融合开启新篇
android·人工智能·重构
easy_coder10 分钟前
从“未知故障”到“自治诊断”:基于双路召回与RAG的智能诊断系统构建
人工智能·云原生·云计算
中科天工14 分钟前
如何实现工业AI在智能制造中的应用?
大数据·人工智能·智能
linmoo198615 分钟前
Langchain4j 系列之六 - 提示词
人工智能·langchain·prompt·提示词·message·langchain4j
openinstall全渠道统计18 分钟前
【破局游戏体验困局:openinstall能助力App实现什么?】
人工智能
liulanba20 分钟前
AI Agent技术完整指南 第四部分:实战项目
人工智能
程序员JerrySUN26 分钟前
用 OP-TEE 给 AI 模型“上锁”:密文存储、TEE 解密放行、推理后销毁(实战可落地)
人工智能·系统安全·安全架构·安全性测试
xfchsjh28 分钟前
在2025AI体验时代,看深圳河北上海设计公司重新定义数字科技展厅
人工智能·科技·设计·艺术·展厅设计·科技展厅设计·数字展厅设计