gpt4 book ai didi

python - 如何提高这个简单的数据清理代码的运行时间?

转载 作者:行者123 更新时间:2023-12-01 01:01:58 25 4
gpt4 key购买 nike

我正在预处理一个大型数据帧以进行分析。基本上,我试图在列中找到最大数字或接近最大数字(“接近”定义为大于 0.9*最大数字),并用 1 标记它> 而其他位置保持为0,即,如果列包含 [25, 3, 5, 24, 0],则应将其转换为 [1,0,0,1,0]。不知何故,我编写的代码需要永远运行。

我编写了一个简单的列表理解来逐列清理数据。该代码运行前 2,000 列的时间不到 1 秒。但是,当我将列数增加到10,000时,它变得非常慢,花了半个多小时。最终我想在 500 万行数据集上运行此代码,是否有什么问题需要我进行更改以提高效率?

tic = time.time()

for col in temp_dataset_1.iloc[:,:10000]:
temp_dataset_1[col] = [1 if i >= i.max()*.9 else 0 for i in temp_dataset_1[col]]

toc = time.time() - tic
print('Calculating 10,000 out of 5,810,172 rows took %d seconds' %toc)
#temp_dataset_1.iloc[:,:10000].head(n=5)

我的数据结构知识有限,我是否遗漏了一些明显的东西?

最佳答案

使用 numpy 尝试一下这种方法:

import time
import pandas as pd
import numpy as np

# Create fake data (this should take around 9s)
tic = time.time()
value2 = []
for x in range(10000):
value1 = []
for y in range(10000):
value1.append(x)
value2.append(value1)

print(time.time() - tic)
tic = time.time()
temp_dataset_1 = pd.DataFrame(value2)


for col in temp_dataset_1.iloc[:,:10]:
max_value = max(temp_dataset_1[col])
a = np.array(temp_dataset_1[col].values.tolist())
temp_dataset_1[col] = np.where(a >= max_value*.9, 1, 0).tolist()

print(temp_dataset_1.shape)
toc = time.time() - tic
print('Calculating 10,000 out of 5,810,172 rows took %d seconds' %toc)

对于 10K x 10K 矩阵,时间为 19 秒:

Calculating 10,000 out of 5,810,172 rows took 19 seconds

关于python - 如何提高这个简单的数据清理代码的运行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55720892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com