Python写入列表到csv
如何将打印语句中的结果写入csv文件,每次循环运行结果时都要添加到下一行。结果包含一个列表。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
您可以将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)
如果结果是Series or DataFrame你应该只使用to_csv
方法的大熊猫。
所以,我会创建一个数据框并追加结果? – user1779646
您似乎可以通过简单地生成一个序列/数据框的方式获取这些信息。我对熊猫还不太了解,但还不知道该怎么做。 –
这不是一个答案,应该是一个评论 – Merlin
最简单的就是使用熊猫。
import pandas as pd
mylist = [1, 2, 3, 4]
df = pd.Series(mylist)
df.to_csv('filename.csv')
您必须将列表转换为序列/数据框。
如果您使用的是熊猫的数据帧,请参阅该交易的其他的答案之一。如果没有,使用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())
谢谢,我喜欢你编辑的。 – user1779646