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

相关文章
|
5天前
|
数据采集 Python
Pandas 常用函数-数据清洗
Pandas 常用函数-数据清洗
13 2
|
2月前
|
数据处理 索引 Python
Pandas中resample方法:轻松处理时间序列数据
Pandas中resample方法:轻松处理时间序列数据
57 0
|
4月前
|
数据采集 数据挖掘 数据处理
如何用pandas处理数据集?
如何用pandas处理数据集?【7月更文挑战第8天】
52 0
|
索引 Python
pandas数据合并
pandas数据合并
72 0
|
存储 机器学习/深度学习 数据挖掘
向量化操作简介和Pandas、Numpy示例
Pandas是一种流行的用于数据操作的Python库,它提供了一种称为“向量化”的强大技术可以有效地将操作应用于整个列或数据系列,从而消除了显式循环的需要。在本文中,我们将探讨什么是向量化,以及它如何简化数据分析任务。
258 0
|
机器学习/深度学习 关系型数据库 数据挖掘
Pandas 2.0 vs Polars:速度的全面对比
前几天的文章,我们已经简单的介绍过Pandas 和Polars的速度对比。刚刚发布的Pandas 2.0速度得到了显著的提升。但是本次测试发现NumPy数组上的一些基本操作仍然更快。并且Polars 0.17.0,也在上周发布,并且也提到了性能的改善,所以我们这里做一个更详细的关于速度方面的评测。
300 0
Pandas 2.0 vs Polars:速度的全面对比
|
数据采集 BI Python
对pandas进行数据预处理的实例讲解
对pandas进行数据预处理的实例讲解
|
Python
python计算的效率问题-pandas、numpy结合代替遍历pandas数据
python计算的效率问题-pandas、numpy结合代替遍历pandas数据
112 0
python计算的效率问题-pandas、numpy结合代替遍历pandas数据
|
机器学习/深度学习 API Python
使用Pandas的resample函数处理时间序列数据的技巧
使用Pandas的resample函数处理时间序列数据的技巧
360 0
使用Pandas的resample函数处理时间序列数据的技巧
|
IDE 开发工具 索引
Pandas数据框整体操作(上)
引入 前面几期我几乎介绍了pandas可能用到的各个基础函数。 但有一个非常重要的内容似乎一直忽视了 包括我近期查阅了许多文章,好像在这部分内容上比较难以讲清楚,没基础的读者很容易云里雾里。 他就是pandas的数据框整体操作
Pandas数据框整体操作(上)