链接到CSV文件:https://www.emcsg.com/marketdata/priceinformation [我下载了72个句点的CSV文件。每天下午12点 - UTC + 08:00,它有一个新文件,显示当天的价格和价格预测,直到第二天的上午12点。]
我试图显示能量(USEP / $ MWh)低于每天平均值的日期和时间。
for line in lines:
try:
time = line.split(",")[1][1:-1]
interval = line.split(",")[0][1:-1]
item = line.split(",")[4][1:-1] #Choose 4th column and delete ""
if interval == next_day:
if float(item) < average:
print interval, time, float(item)
except:
pass #If it can't parse, the string is not a number
上面的代码打印出类似这样的内容
30 Sep 2017 01:00-01:30 84.14
30 Sep 2017 01:30-02:00 84.12
30 Sep 2017 02:00-02:30 85.11
30 Sep 2017 02:30-03:00 83.49
30 Sep 2017 03:00-03:30 80.66
30 Sep 2017 03:30-04:00 75.69
30 Sep 2017 04:00-04:30 72.45
.
.
.
30 Sep 2017 21:30-22:00 79.72
30 Sep 2017 22:00-22:30 73.23
30 Sep 2017 22:30-23:00 73.58
30 Sep 2017 23:00-23:30 72.14
30 Sep 2017 23:30-00:00 85.21
显示能源价格低于9月30日平均值的日期和时间。
但是我想打印那样的东西
30 Sep 2017 01:00-04:30
30 Sep 2017 21:30-00:00
基本上我想把它们分组,因为时间是连续的。一旦中断(在此期间,价格高于平均水平),当价格低于平均值时,它将在下一个“期间”打印一个新行。
我在考虑比较每个'时段'的结束时间(例如01:00-01:30,01:30是结束时间)和下一个时段的开始时间(例如01:30-02:00) ,01:30是下一行的开始时间),但我不确定它是否可行。
提前谢谢!(:
答案 0 :(得分:1)
长期以来,这必须是我的最丑陋的代码之一。 但也许你的意思是这样的? 有些人认为这可能直接用熊猫来完成。
import pandas as pd
url = "https://www.emcsg.com/marketdata/priceinformation?downloadRealtime=true"
df = pd.read_csv(url)
average = df["USEP($/MWh)"].mean()
output = []
entry = 0
old = None
# Starts a loop
# (if average changes from bigger to lower or vice versa
# create new entry in the output list)
for k,v in df.iterrows():
# First entry
if not old:
output.append([])
output[entry].append(v["Period"])
if v["USEP($/MWh)"] > average:
old = "bigger"
output[0].append(old)
else:
old = "smaller"
output[entry].append(old)
output[entry].append(v["USEP($/MWh)"])
continue
# The rest
if v["USEP($/MWh)"] > average:
new = "bigger"
else:
new = "smaller"
if new == old:
output[entry][0] = output[entry][0].split("-")[0]+"-"+v["Period"].split("-")[1]
output[entry][2] += v["USEP($/MWh)"]
else:
entry += 1
output.append([])
output[entry].append(v["Period"])
output[entry].append(new)
output[entry].append(v["USEP($/MWh)"])
old = new
输出如下:
[['12:00-15:30', 'bigger', 503.52],
['15:30-18:30', 'smaller', 423.78],
['18:30-00:00', 'bigger', 839.39],
['00:00-10:00', 'smaller', 1372.4700000000003],
['10:00-11:30', 'bigger', 215.90999999999997],
['11:30-13:00', 'smaller', 211.83000000000004],
['13:00-17:00', 'bigger', 576.4200000000001],
['17:00-20:30', 'smaller', 486.94],
['20:30-22:00', 'bigger', 227.11],
['22:00-00:00', 'smaller', 271.34000000000003]]