Pandas中的直接向量化操作

简介: Pandas中的直接向量化操作

一、何为直接向量化操作?

pandas中,直接向量化操作通常指的是利用pandas内建的函数或NumPy的数组操作来处理数据,而不是使用apply或applymap方法。这些操作往往更加高效,因为它们在底层直接利用了优化的C语言代码,避免了Python层面的循环和额外的函数调用开销。

二、为啥要进行直接向量化操作?

下面,我们通过一个简单的例子来说明一下为啥要进行直接向量化操作?以一个100万的一维数组相加为例:

import numpy as np
# 创建一个较大的随机数组a = np.random.rand(1000000)b = np.random.rand(1000000)
print(a)print(b)# 非向量化操作:使用Python循环计算两个数组的和def add_arrays_nonvectorized(x, y):    result = []    for i in range(len(x)):        result.append(x[i] + y[i])    return result
# 向量化操作:直接使用NumPy的加法def add_arrays_vectorized(x, y):    return x + y
# 测试非向量化操作的执行时间%timeit add_arrays_nonvectorized(a, b)
# 测试向量化操作的执行时间%timeit add_arrays_vectorized(a, b)

运行结果为:

baaa598e3f881e797576803268e242e2.png

从执行时间来看,向量化操作的执行时间远小于非向量化操作。具体来说,非向量化操作的执行时间大约为186毫秒每循环,而向量化操作的执行时间为2.99毫秒每循环。

向量化操作之所以快,是因为它利用了底层的优化和并行计算能力,而传统的循环方法则没有利用这些优势。在处理大规模数据时,向量化操作可以显著提高效率。

三、常见的直接向量化操作示例:

1. 数学运算

DataFrame或Series中的元素进行数学运算时,可以直接使用向量化操作,无需编写循环。

# 创建一个示例 DataFramedf = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})# 向量化加法df['C'] = df['A'] + df['B']


2. 条件筛选

使用向量化条件表达式来筛选数据,比使用 .apply() 或循环更快。

# 筛选 A 列大于 1 的行filtered_df = df[df['A'] > 1]


3. 字符串操作

Pandas的字符串方法(如.str访问器)也是向量化的,可以高效地对 Series 中的每个字符串元素执行操作。

import pandas as pd # 示例 DataFramedf = pd.DataFrame({'text': ['hello', 'world', 'python']})# 向量化字符串操作df['text_upper'] = df['text'].str.upper()df

9c3c6d457ab14bd8146c83effe359d11.png


4. 通用函数(ufuncs)

NumPy的通用函数(ufuncs)可以用于Pandas的Series和 DataFrame,实现快速的元素级运算。

import numpy as np# 示例DataFramedf = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})# 使用 NumPy的ufunc进行计算df['C'] = np.sqrt(df['A'] ** 2 + df['B'] ** 2)df

四. 总结

直接向量化操作是提高Pandas数据处理效率的关键。通过使用直接向量化的方法,可以避免显式循环,利用底层的NumPy操作来加速数据处理。在处理大规模数据集时,直接向量化操作尤其重要,因为它可以显著减少计算时间。

总之,一句话,在Pandas中能用直接向量操作的尽量用直接向量进行,实在不行,再考虑非直接向量的操作手段,比如apply、map、applymap等手段。

相关文章
|
数据处理 Python
Pandas数据处理 | apply() 函数用法指南!
本文介绍一下关于 Pandas 中 apply() 函数的几个常见用法,apply() 函数的自由度较高,可以直接对 Series 或者 DataFrame 中元素进行逐元素遍历操作,方便且高效,具有类似于 Numpy 的特性。
|
5月前
|
数据处理 开发工具 开发者
requirement.txt 管理python包依赖
在 Python 项目中,`requirements.txt` 用于记录依赖库及其版本,便于环境复现。本文介绍了多种生成该文件的方法:基础方法使用 `pip freeze`,进阶方法使用 `pipreqs`,专业方法使用 `poetry` 或 `pipenv`,以及手动维护方式。每种方法适用不同场景,涵盖从简单导出到复杂依赖管理,并提供常见问题的解决方案,帮助开发者高效生成精准的依赖列表,确保项目环境一致性。
1785 4
|
数据采集 数据可视化 数据挖掘
Python爬虫实战:抓取网站数据并生成报表
本文将介绍如何使用Python编写简单而高效的网络爬虫,从指定的网站上抓取数据,并利用数据分析库生成可视化报表。通过学习本文内容,读者将能够掌握基本的爬虫技术和数据处理方法,为日后开发更复杂的数据采集与分析工具打下坚实基础。
|
Python
python获取pdf和word文档页数
python获取pdf和word文档页数
1056 0
|
存储 安全 Linux
Docker 离线安装与基本使用
Docker 离线安装与基本使用
3751 0
Docker 离线安装与基本使用
|
存储 自然语言处理 搜索推荐
【Elasticsearch专栏 01】深入探索:Elasticsearch的正向索引和倒排索引是什么?
正向索引根据文档ID直接查找文档内容,适用于精确匹配场景;而倒排索引则基于文档内容构建,通过关键词快速定位相关文档,适用于全文搜索,显著提高查询效率,是搜索引擎的核心技术。
311 2
|
10月前
|
算法 Java
算法系列之数据结构-二叉搜索树
二叉查找树(Binary Search Tree,简称BST)是一种常用的数据结构,它能够高效地进行查找、插入和删除操作。二叉查找树的特点是,对于树中的每个节点,其左子树中的所有节点都小于该节点,而右子树中的所有节点都大于该节点。
453 22
|
10月前
|
机器学习/深度学习 传感器 数据采集
基于机器学习的数据分析:PLC采集的生产数据预测设备故障模型
本文介绍如何利用Python和Scikit-learn构建基于PLC数据的设备故障预测模型。通过实时采集温度、振动、电流等参数,进行数据预处理和特征提取,选择合适的机器学习模型(如随机森林、XGBoost),并优化模型性能。文章还分享了边缘计算部署方案及常见问题排查,强调模型预测应结合定期维护,确保系统稳定运行。
1039 0
|
缓存 容灾 网络协议
ACK One多集群网关:实现高效容灾方案
ACK One多集群网关可以帮助您快速构建同城跨AZ多活容灾系统、混合云同城跨AZ多活容灾系统,以及异地容灾系统。
|
物联网 5G
【计算巢】互联网交换点(IXP):提高网络效率的关键设施
【6月更文挑战第3天】互联网交换点(IXP)是提升网络效率的关键,充当数据传输的交通枢纽。IXP让网络运营商直接交换数据,减少延迟,降低成本,优化电子商务和多媒体服务体验。虽然面临技术和管理挑战,但随着5G和物联网的发展,IXP的重要性将持续增长,为互联网的未来加速。
2092 3
【计算巢】互联网交换点(IXP):提高网络效率的关键设施