Python编写列表到csv

时间:2016-08-11 15:04:49

标签: python csv pandas

每次循环运行结果以添加到下一行时,如何将print语句中的结果写入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

4 个答案:

答案 0 :(得分:1)

您可以将print更改为yield,然后使用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)

答案 1 :(得分:0)

如果结果是大熊猫Series or DataFrame,您应该使用to_csv方法。

答案 2 :(得分:0)

最简单的是使用熊猫。

import pandas as pd

mylist = [1, 2, 3, 4]

df = pd.Series(mylist)

df.to_csv('filename.csv')

您必须将列表转换为系列/数据框。

答案 3 :(得分:0)

如果您正在使用pandas数据框,请参阅其中一个处理该问题的答案。如果没有,使用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())