python - 数据帧非常慢

标签 python python-3.x pandas

我有一个数据框,其中的日期索引由超过 17000 行组成。 对于每一行,我都有一个功耗、温度和日期作为数据帧的索引。还有其他 4 列,其中包含各种格式的日期。

对于每一行,如果日期 >= 08/01/2019,我正在做:

消耗量(日期) = 消耗量(日期) - 消耗量(日期-1周)

温度(日期)= 温度(日期)- 温度(日期-1 周)

但是非常非常慢(比如4分钟......)

结果很好,但我无法加快进程。

我想知道当我开始使用 python 时,该方法是否正确? 也许我在这里没有使用 4 列来进行此计算,这会减慢整个过程?

这是代码的一部分,需要花费大量时间来处理我上面描述的数据帧。

for index, row in df.iterrows():

    if index >= datetime(year,1,8,0,0):
       date_start_j_wb = index - timedelta(days=7)

       conso_j = df[df.index == index]["conso"].values
       conso_j_wb = df[df.index == date_start_j_wb]["conso"].values
       temp_j = df[df.index == index]["temp"].values
       temp_j_wb = df[df.index == date_start_j_wb]["temp"].values
       s_dconso = conso_j[0] - conso_j_wb[0]
       s_dtemp =  temp_j[0] - temp_j_wb[0]

这是看起来像数据框的内容,可能是因为日期列的数量导致代码如此缓慢:

df["start_date"] = start_date
df["start_hour"]= start_hour
df["end_hour"] = end_hour
df["start_date_hour"] = start_date_hour
df["start_date_hour_str"] = start_date_hour_str
df["end_date_hour_str"] = end_date_hour_str
df["end_date_hour"] = end_date_hour
df["end_hour"] = end_hour
df["conso"] = conso
df["temp"] = temp

您能否给我建议以加快此代码的速度。 有了这么多数据,我认为不会超过 1 分钟...

提前谢谢您,

最佳答案

嗯,好吧,我明白了,这样做我根本没有利用矢量计算......但我看不到其他方式。

我的数据框看起来像这样(一年,30 分钟步长):

                 start_date start_hour  ...  conso      temp
  start_date_hour                             ...                 
  2019-01-01 00:00:00  2019-01-01      00:00  ...  0.057  5.684032
  2019-01-01 00:30:00  2019-01-01      00:30  ...  0.057  5.663681
  2019-01-01 01:00:00  2019-01-01      01:00  ...  0.057  5.655579
  2019-01-01 01:30:00  2019-01-01      01:30  ...  0.056  5.655822
  2019-01-01 02:00:00  2019-01-01      02:00  ...  0.057  5.664895
  2019-01-01 02:30:00  2019-01-01      02:30  ...  0.057  5.654780
  .....

正如我之前所说,对于每一行,我都会检查索引是否优于或等于 2019-01-08,如果是的话,我会在一周前查看“conso”和“temp”,然后执行不同的操作日期“D”的“conso”减去“conso”a 日期(D-1week) 这里的输出是自 2019 年 8 月 1 日起每行的消耗变化和温度变化。

然后我将 Delta_Conclusion 与 Delta_Temperature 相乘,并将 Delta_Temperature 与 Delta_Temperature 相乘。

for index, row in df.iterrows():


    if index >= datetime(year,1,8,0,0):
       date_start_j_wb = index - timedelta(days=7)

       conso_j = df[df.index == index]["conso"].values
       conso_j_wb = df[df.index == date_start_j_wb]["conso"].values
       temp_j = df[df.index == index]["temp"].values
       temp_j_wb = df[df.index == date_start_j_wb]["temp"].values

       s_dconso = conso_j[0] - conso_j_wb[0]
       s_dtemp =  temp_j[0] - temp_j_wb[0]

       prodtemp = s_dtemp*s_dtemp
       prodtemp_conso = s_dtemp*s_dconso

然后我将结果“prodtemp”和“prodtemp_conso”存储在两个列表中。目标实际上是基本上进行线性回归。

然后,我将 prodtemp_conso 除以 prodtemp,然后对每个相同的半小时时间段求和。

但是我上面提到的代码部分是让一切变慢的部分..

关于python - 数据帧非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55819836/

相关文章:

python - Python中条件表达式的求值顺序是什么?

python-3.x - 我在哪里可以找到 ./configure 来运行 python 3.2 中的命令 ./configure –with-zlib=/usr/include

python - 通过在一列字符串中找到确切的单词来创建一个新列

python - 如何使选定的 qgraphicsitem 的边界矩形自动显示?

python - KivMob 未加载广告

python - Pandas 空数据框

python - python requests.get 中的特定字符串给出 ValueError

python - 将列表中的元素移动到所需的列

python Pandas : iloc with flexible column position

python - 数据帧的迭代创建和命名