apply() 很慢 - 如何让它更快或者我有什么选择

ruby

1个回答

写回答

15121212571

2025-07-09 19:30

+ 关注

Pandas
Pandas

使用 apply() 函数时,如果处理的数据量较大,可能会导致执行速度变慢。针对这种情况,我们可以采取一些方法来优化代码,提高运行效率。本文将介绍一些常用的优化技巧,并给出相应的案例代码。

使用向量化操作

apply() 函数通常用于对DataFrame的每一行或每一列进行操作,但是它在处理大型数据集时效率较低。相比之下,向量化操作能够更快地处理数据。在使用Pandas进行数据处理时,尽量使用向量化的方法,而不是依赖于apply()函数。

例如,假设我们有一个包含10000行的DataFrame,需要对其中一列的数据进行平方运算,可以使用如下的向量化操作:

import Pandas as pd

import numpy as np

df = pd.DataFrame({'A': np.random.randint(0, 100, 10000)})

# 使用向量化操作计算平方

df['A_squared'] = df['A'] <strong> 2

通过使用向量化操作,可以避免使用apply()函数对每一行进行循环计算,从而提高代码执行效率。

使用NumPy和Pandas内置函数

NumPy和Pandas提供了许多内置函数,这些函数经过了高度优化,可以更快地处理数据。因此,在进行数据处理时,推荐使用这些内置函数,而不是自定义函数并通过apply()函数调用。

例如,假设我们有一个包含10000行的DataFrame,需要对其中一列的数据进行标准化处理,可以使用Pandas的内置函数进行计算:

import Pandas as pd

import numpy as np

df = pd.DataFrame({'A': np.random.randint(0, 100, 10000)})

# 使用Pandas内置函数进行标准化处理

df['A_normalized'] = (df['A'] - df['A'].mean()) / df['A'].std()

通过使用Pandas的内置函数,可以更快地进行标准化处理,而不需要使用apply()函数。

并行计算

如果处理的数据量非常大,而且机器的计算资源充足,可以考虑使用并行计算来加速代码执行。Pandas的apply()函数支持并行计算,可以通过设置参数n_jobs来指定并行计算的线程数量。

例如,假设我们有一个包含10000行的DataFrame,需要对其中一列的数据进行复杂的计算,可以使用并行计算来提高效率:

import Pandas as pd

import numpy as np

from joblib import Parallel, delayed

df = pd.DataFrame({'A': np.random.randint(0, 100, 10000)})

# 自定义复杂计算函数

def complex_calculation(x):

# 复杂计算的逻辑

...

# 使用并行计算加速处理

df['result'] = Parallel(n_jobs=-1)(delayed(complex_calculation)(x) for x in df['A'])

通过设置参数n_jobs为-1,可以让计算过程使用所有可用的线程,从而加快代码执行速度。

在处理大型数据集时,为了提高代码执行效率,我们可以采取以下措施:

1. 使用向量化操作代替apply()函数,尽量避免循环计算。

2. 使用NumPy和Pandas的内置函数,而不是自定义函数并通过apply()函数调用。

3. 使用并行计算来加速代码执行,利用机器的计算资源。

通过以上的优化方法,我们可以更快地处理大型数据集,提高代码执行效率。

案例代码

下面是一个示例代码,演示了如何使用向量化操作、内置函数和并行计算来优化代码执行效率:

Python

import Pandas as pd

import numpy as np

from joblib import Parallel, delayed

# 生成包含10000行的DataFrame

df = pd.DataFrame({'A': np.random.randint(0, 100, 10000)})

# 使用向量化操作计算平方

df['A_squared'] = df['A'] </strong> 2

# 使用Pandas内置函数进行标准化处理

df['A_normalized'] = (df['A'] - df['A'].mean()) / df['A'].std()

# 自定义复杂计算函数

def complex_calculation(x):

# 复杂计算的逻辑

...

# 使用并行计算加速处理

df['result'] = Parallel(n_jobs=-1)(delayed(complex_calculation)(x) for x in df['A'])

# 打印处理后的DataFrame

print(df)

通过以上的优化措施,我们可以更快地处理大型数据集,并提高代码执行效率。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号