gpt4 book ai didi

python - 使用 python pandas 进行大文件分析的延迟

转载 作者:行者123 更新时间:2023-12-05 07:36:45 24 4
gpt4 key购买 nike

我有一个非常大的文件 (10 GB),大约有 4000 亿行,它是一个包含 4 个字段的 csv。这里的描述,第一个字段是一个ID,第二个是ID的当前位置,第三个字段是分配给该行的相关编号。类似这样:

41545496|4154|1
10546767|2791|2
15049399|491|3
38029772|491|4
15049399|1034|5

我的意图是在另一个文件或同一个文件中创建第四列(旧位置),其中存储了您之前存储ID的位置,我所做的是验证该ID号是否已经出现过,我look for its last appearance and assigned to his field of old position,他上次出现的位置。如果 ID 以前没有出现过,那么我将它在同一行中的当前位置分配给它的旧位置。像这样:

41545496|4154|1|4154
10546767|2791|2|2791
15049399|491|3|491
38029772|491|4|491
15049399|1034|5|491

我创建了一个程序来读取和分析文件,但每分钟执行 10,000 行读取,因此它为我提供了非常长的时间来读取整个文件,大约超过 5 天。

import pandas as pd

with open('file_in.csv', 'rb') as inf:
df = pd.read_csv(inf, sep='|', header=None)

cont = 0
df[3] = 0

def test(x):
global cont

a = df.iloc[:cont,0]

try:
index = a[a == df[0][cont]].index[-1]
df[3][cont] = df[1][index]
except IndexError:
df[3][cont] = df[1][cont]
pass
cont+= 1

df.apply(test, axis=1)

df.to_csv('file_out.csv', sep='|', index=False, header=False)

我在大学里有一台 64 处理器和 64 GB RAM 的计算机,但它仍然很长一段时间,有什么办法可以减少这段时间吗?非常感谢!

最佳答案

高效地处理数据

您的方法有两个主要问题:

  • 本不应该将如此多的数据写入文本文件
  • 您的方法需要 (n^2/2) 次比较

一个更好的主意是在进行实际工作之前先对数组进行索引排序。因此,在最坏的情况下,您只需要大约 2n 次比较操作和 n*log(n) 次排序操作。

我还使用 numba 来编译该函数,它将计算时间加快 100 倍或更多。

import numpy as np

#the hardest thing to do efficiently
data = np.genfromtxt('Test.csv', delimiter='|',dtype=np.int64)

#it is important that we use a stable sort algorithm here
idx_1=np.argsort(data[:,0],kind='mergesort')
column_4=last_IDs(data,idx_1)

#This function isn't very hard to vectorize, but I expect better
#peformance and easier understanding when doing it in this way
import numba as nb
@nb.njit()
def last_IDs(data,idx_1):
#I assume that all values in the second column are positive
res=np.zeros(data.shape[0],dtype=np.int64) -1
for i in range(1,data.shape[0]):
if (data[idx_1[i],0]==data[idx_1[i-1],0]):
res[idx_1[i]]=data[idx_1[i-1],1]

same_ID=res==-1
res[same_ID]=data[same_ID,1]

return res

要获得高性能的写入和读取数据,请查看:https://stackoverflow.com/a/48997927/4045774

如果您没有获得至少 100 M/s 的 IO 速度,请询问。

关于python - 使用 python pandas 进行大文件分析的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49011508/

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