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等手段。

相关文章
|
19天前
|
数据处理 索引 Python
Pandas中resample方法:轻松处理时间序列数据
Pandas中resample方法:轻松处理时间序列数据
32 0
|
2月前
|
存储 索引 Python
高效的5个pandas函数,你都用过吗?
高效的5个pandas函数,你都用过吗?
|
3月前
|
数据采集 数据挖掘 数据处理
如何用pandas处理数据集?
如何用pandas处理数据集?【7月更文挑战第8天】
40 0
|
数据处理 Python
技巧 | 分享几个Pandas高效函数(二)
技巧 | 分享几个Pandas高效函数(二)
|
存储 机器学习/深度学习 数据挖掘
向量化操作简介和Pandas、Numpy示例
Pandas是一种流行的用于数据操作的Python库,它提供了一种称为“向量化”的强大技术可以有效地将操作应用于整个列或数据系列,从而消除了显式循环的需要。在本文中,我们将探讨什么是向量化,以及它如何简化数据分析任务。
211 0
|
数据处理 索引 Python
技巧 | 分享几个Pandas高效函数(三)
技巧 | 分享几个Pandas高效函数(三)
|
机器学习/深度学习 数据处理 Python
Python应用专题 | 9:Pandas中数据去重
在数据处理过程中常常会遇到重复的问题,这里简要介绍遇到过的数据重复问题及其如何根据具体的需求进行处理。
|
机器学习/深度学习 关系型数据库 数据挖掘
Pandas 2.0 vs Polars:速度的全面对比
前几天的文章,我们已经简单的介绍过Pandas 和Polars的速度对比。刚刚发布的Pandas 2.0速度得到了显著的提升。但是本次测试发现NumPy数组上的一些基本操作仍然更快。并且Polars 0.17.0,也在上周发布,并且也提到了性能的改善,所以我们这里做一个更详细的关于速度方面的评测。
292 0
Pandas 2.0 vs Polars:速度的全面对比
|
数据采集 机器学习/深度学习 数据挖掘
使用Python进行数据清洗与预处理:Pandas和NumPy的应用
在数据分析和机器学习的过程中,数据清洗和预处理是非常重要的一步。Python提供了许多强大的库来帮助我们有效地进行数据清洗和预处理。本文将重点介绍两个常用的库:Pandas和NumPy。我们将使用一个实际的数据集来演示如何使用这两个库进行数据清洗和预处理,并展示其在数据分析中的应用。
364 0
|
Python
python计算的效率问题-pandas、numpy结合代替遍历pandas数据
python计算的效率问题-pandas、numpy结合代替遍历pandas数据
107 0
python计算的效率问题-pandas、numpy结合代替遍历pandas数据