2016-08-11 5 views
1

print文にある結果をcsvファイルに書き込むにはどうすればいいですか?ループがその結果を次の行に追加するたびに実行します。結果にはリストが含まれています。結果はあなただけto_csvメソッドを使用する必要がありSeries or DataFrameパンダがある場合Python csvにリストを書く

def func_high(i): 
    swing_low = data_file.iloc[i].Low  
    date = data_file.iloc[i].Date 

    while i < len(data_file): 
     i = i + 1 

     try : 
      swing_high = data_file.iloc[i].High 
      if (swing_high < data_file.iloc[i + 1].High) and (data_file.iloc[i + 1].High > data_file.iloc[i + 2].High): 
       date_diff = data_file.iloc[i + 1].Date - date 
       price_diff = data_file.iloc[i + 1].High - swing_low 
       **print (price_diff/date_diff.days, date, swing_low , data_file.iloc[i + 1].Date, data_file.iloc[i + 1].High, date_diff)** 

    except IndexError: 
     pass 
    continue 

答えて

1

printyieldに変更し、csv.writerを使用しても構いません(ロジックを簡単に編集できるように、私はあなたの関数をいくつか編集しました)。

import csv 
i = 0 

def func_high(i): 
    swing_low = data_file.iloc[i].Low  
    date = data_file.iloc[i].Date 
    while i < (len(data_file) - 3): 
     i += 1 

     swing_high = data_file.iloc[i].High 
     curr_date = data_file.iloc[i + 1].Date 
     curr_high = data_file.iloc[i + 1].High 
     next_high = data_file.iloc[i + 2].High 

     if (swing_high < curr_high) and (curr_high > next_high): 
      date_diff = curr_date - date 
      price_diff = curr_high - swing_low 
      avg_change = price_diff/date_diff.days 
      yield [avg_change, date, swing_low, curr_date, curr_high, date_diff] 


with open('my_csv.csv', 'w') as out_f: 
    writer = csv.writer(out_f, lineterminator='\n') 
    writer.writerows(func_high(i)) 

パンダのルートに移動する場合は、上記のジェネレータを使用して次の操作を行うことができます。

pd.DataFrame(list(func_high(i)).to_csv('my_csv.csv', index=False, header=False)

+0

ありがとう、私はあなたの編集が好きです。 – user1779646

0

+0

私はデータフレームを作成し、結果を追加しますか? – user1779646

+0

単純にシリーズ/データフレームを生成する方法でその情報を取得できるようです。私はPandasにそれほど精通していないが、それをどうやって行うかを知っている。 –

+2

これは答えではありません、コメントでなければなりません – Merlin

0

最も簡単なのはパンダを使用することです。

import pandas as pd 

mylist = [1, 2, 3, 4] 

df = pd.Series(mylist) 

df.to_csv('filename.csv') 

リストをシリーズ/データフレームにする必要があります。

0

あなたはパンダのデータフレームを使用している場合は、そのを扱う他の回答のいずれかを参照してください。そうでない場合は、CSVライターを使用することもできます。ただし、完全性を期すために、最も簡単な方法はデータを直接書き込むことです。あなたのサンプルコードのデータ構造に何が入るのか分からないので、私は簡単なサンプルプログラムを提供しています:

import sys 

def write_csv_row(f, row_data): 
    out_str = ','.join([str(e) for e in row_data]) 
    f.write(out_str + '\n') 

def main(): 
    fname = 'test.dat' 
    data = [["Column 1", "Column 2"], [1,1], [2,2]] 
    with open(fname, 'w') as out_file: 
     for row in data: 
      write_csv_row(out_file, row) 

if __name__ == '__main__': 
    sys.exit(main()) 
関連する問題