2017-10-01 11 views
0

CSVファイルへのリンク:https://www.emcsg.com/marketdata/priceinformation [72期間のCSVファイルをダウンロードします。毎日午後12時(UTC + 08:00)の午後には、その日の価格と翌日の午前12時までの価格予測を示す新しいファイルがあります。]Python CSVファイル、期間の比較

私は、 (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

やってみる – Adders

+0

あなたは正しいことをしていると思います。これを行う1つの方法:開始と終了の2つの変数と、終了の場合は新しいエントリを作成しない場合はリストへの追加を開始します。 –

答えて

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 

出力になります。それはあなたが何であるかに100%はっきりしていない

[['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]] 
+0

まあ、私のコードが醜いことを教えてくれてありがとう。コーディングの仕方が分かっていて、コーディング方法を習得しなければならないだけではないので、おそらくこのウェブサイトでは質問しないでしょう。とにかく、あなたの助けをありがとう。 – Autumn

+0

@Autumnここで人々が助けを求めているので自分のコードが醜い人には決して言わないだろう。私は自分のコードについて話していた。 –

+0

@Autumnあなたのコードが醜いと言っていたら、あなたは正直な態度でそれを取っていたはずです。 [コミュニティーがあります](https://codereview.stackexchange.com/)。あなたのコードを分け合わせることを唯一の目的としています。批判に直面した受動的な攻撃的な態度は、このビジネスのどこにも導かれません。また、あなたのスキルレベルにかかわらず、あなたは常に質問をする必要があります。常に。 –

関連する問題