如何减少使用Pandas循环100万组数据的时间?

2024-09-30 06:34:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个csv文件的1列中有将近100万行数据。如果我画出100万组数据,它将是一个包含5个峰值的波形函数。所以我做的第一件事就是把这个csv文件导入pandas dataframe。我想做的是检测每个波的开始时间和结束时间,我已经做了一个算法,它确实产生了我想要的输出。在

然而,现在的主要问题是,它需要近2个小时才能得到我想要的最终输出,我认为它不应该这么长。我所能想到的是,我使用了太多for循环,因此迭代数据需要太多时间。下面是代码示例。(请注意,虽然这只是一个示例代码,但它应该足够清楚,以说明我使用的for循环是什么样的结构。在

    for i in range(len(data)-(athreshold)):
        if all(data[i+k] < bthreshold for k in range(0,athreshold)):
            n[i] = 5                
            n[i+(athreshold)] = 5
        else:
            for i in range(len(data)-(athreshold), len(data)):
                if data[i] < bthreshold:
                    n[i] = 5

正如您在上面看到的,我使用for循环来迭代这100万组数据,这并不奇怪,它需要很长时间来处理。所以我想知道有没有更有效的方法来处理这种大数据集?在

^{pr2}$

数据集非常复杂,因为峰值的值在很大范围内上下波动。所以我至少需要浏览一次数据集来整理那些峰值的域时间。。现在我的算法是先迭代这些数据,进行某种函数转换。然后再次循环数据以获得所需的开始时间和结束时间,并将它们附加到新的空列表中。在我得到开始时间和结束时间之后,这将变得容易得多,因为它们的数量很小,其余的步骤肯定不会花很长时间。所以最耗时的部分是我迭代数据集的两次。在


Tags: 文件csv数据函数代码in算法示例
1条回答
网友
1楼 · 发布于 2024-09-30 06:34:10

一种方法是沿着另一个轴移动数据。例如,假设data是形状(len(data),numpy.array),并且

shifted_data = []
for shift in range(time_threshold):
    shifted_data.append(data[shift:len(data) - time_threshold + shift])
shifted_data = np.concat(shifted_data, axis=1)

现在,每个片段shifted_data[time, :]对应于数据的一个片段,因此像这样的操作

^{pr2}$

返回一个01的数组,其中每一行都相当于语句

all(data[i+k] < power_threshold for k in range(0,time_threshold))

而且执行起来应该快得多。在

相关问题 更多 >

    热门问题