Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从数据库获取数据、对其进行操作并将计算保存到csv的最快方法_Python_Loops_Dataframe - Fatal编程技术网

Python 从数据库获取数据、对其进行操作并将计算保存到csv的最快方法

Python 从数据库获取数据、对其进行操作并将计算保存到csv的最快方法,python,loops,dataframe,Python,Loops,Dataframe,我一直在寻找答案,互联网在这件事上似乎很矛盾 我所做的逻辑是从数据库中获取数据束,对内存中的数据执行计算,并将结果写入csv文件。我一直认为熊猫是最快的方式,但像这样的帖子:可能会提出其他建议 所以本质上,我提取了5-10个1000-10000行的数据集(都有一个日期列),并将它们放在数据帧中。然后,我创建新的列,这些列是根据现有列进行计算的。到目前为止,我想说的是,由于这些计算(移动平均值等),数据帧是一种方式。此时,所有数据帧的行数和开始日期都相同 然后,我逐行检查每个数据集并进行比较,以确

我一直在寻找答案,互联网在这件事上似乎很矛盾

我所做的逻辑是从数据库中获取数据束,对内存中的数据执行计算,并将结果写入csv文件。我一直认为熊猫是最快的方式,但像这样的帖子:可能会提出其他建议

所以本质上,我提取了5-10个1000-10000行的数据集(都有一个日期列),并将它们放在数据帧中。然后,我创建新的列,这些列是根据现有列进行计算的。到目前为止,我想说的是,由于这些计算(移动平均值等),数据帧是一种方式。此时,所有数据帧的行数和开始日期都相同

然后,我逐行检查每个数据集并进行比较,以确保数据帧行是相同的日期,并使用一个条件,如果该条件为真,我将使用每个数据帧中该行的数据进行计算并保存这些计算

计算完成后,我想将摘要写入csv文件

下一步是在循环中执行此操作,保存摘要并比较摘要,这样可能需要数小时的处理时间,因此我所能做的任何优化都会有所帮助(是的,我将对其进行线程化)

当前占用时间最长的部分正在逐行遍历数据帧。它甚至比在所有数据帧上进行所有计算花费的时间更长

我在每行循环使用的代码是:

for i in df.index:
   if df.iloc[i]['Date'] != df2.iloc[i]['Date'] etc.
       break #throw critical error
   Calculations using df.iloc[i]['data column'] to pull the data from the dataframe

我读过双方的帖子,都说这是最快的,其他人说这是最快的

一旦计算完成,我将把它放入字典/列表/数据框(最快的方式?),然后写入csv


希望我已经解释清楚了

熊猫并不是真的被设计成在所有的行中循环。你可能会想做一个应用函数来比较日期。因为你的用例非常具体,所以很难提出任何建议。一般来说,减少进行磁盘IO操作的次数,将所有数据保留在内存中,并在数据帧上执行转换/比较,避免逐行操作。您的标题是数据库…这是sqlite数据库吗?你能先合并数据集吗?我不相信从数据库中合并它们会像移动平均值那样工作。日期的比较可以在数据帧上作为一个整体进行,但是我在那里做,因为我必须遍历每一行,因为我需要在每一行上执行各种条件