我有一个数据框,其中的日期索引由超过 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/