Python:如何在for循环中保存两个csv文件
我试图以更好的方式保存我的股票分析结果。有两种方法可以将我的分析保存在csv中(任何一种都可以)Python:如何在for循环中保存两个csv文件,python,python-2.7,csv,finance,quantitative-finance,Python,Python 2.7,Csv,Finance,Quantitative Finance,我试图以更好的方式保存我的股票分析结果。有两种方法可以将我的分析保存在csv中(任何一种都可以) 将第1部分动量分析和第2部分MACD分析保存在csv文件中。两种分析仅在一行中进行。示例:AAPL,动量,250.45,有效,无交叉,MACD高于0 使用标题将第1部分和第2部分保存在单独的csv文件中。然后将两个csv合并到一个csv文件中 我更喜欢第一种解决方案,因为它只需要将其保存到文件中,但我无法使用writerow将其写入一行。我计划增加3到4个部分的分析,并将它们结合起来。 下面的代码用
AAPL,动量,250.45,有效,无交叉,MACD高于0
import pandas as pd
import numpy as np
import csv
import datetime
import matplotlib.pyplot as plt
import talib as ta
now = datetime.datetime.now()
KLSEData = ['AAPL','MSFT','IBM','WDC','STX','EMC','NCR','XRX']
KLSElen = len(KLSEData)
hdm = ['Stock','Mom','Pct','Liquidity']
csvout = open('stock_mo'+now.strftime("%Y-%m-%d")+".csv", 'a')
csvwrite = csv.writer(csvout)
csvwrite.writerow(hdm)
for x in range (1,len(KLSEData),1):
data = pd.read_csv(KLSEData [x][0]+".csv", index_col='Stock', usecols =[0,6,7])
high = pd.read_csv(KLSEData [x][0]+".csv", index_col='Stock', usecols =[0,4])
h=np.array(high['High'])
low = pd.read_csv(KLSEData [x][0]+".csv", index_col='Stock', usecols =[0,5])
l = np.array(low['Low'])
close = pd.read_csv(KLSEData [x][0]+".csv", index_col='Stock', usecols =[0,6])
c = np.array(close['Close'])
vol = high = pd.read_csv(KLSEData [x][0]+".csv", index_col='Stock', usecols =[0,7])
v = np.array(vol['Volume'])
#data = pd.read_csv(KLSEData [x]+".csv", index_col='Stock', usecols =[0,7])
print data.head(3)
vol1 = data['Volume']
print vol
volmean5 = pd.rolling_mean(vol1,5)
#print volmean5
volmean20 = pd.rolling_mean(vol1,20)
#print volmean20
mo_ratio = volmean5/volmean20
print mo_ratio[-1]
mo_pc = (mo_ratio[-1]-1)*100
#print mo_ratio
MACD = ta.MACD(c)
#part1 momentum analysis
if mo_ratio[-1]>= 2.5:
print '+ve momentum'
active = vol.tail(30)==0
"""for y in range (len(data)-30,len(data),1):
active=[data.iloc[y,1]==0]"""
if any(active):
csvwrite.writerow([KLSEData [x][0]]+[" momentum "]+["%.2f"%mo_pc]+["not active"])
csvout.close()
else:
csvwrite.writerow([KLSEData [x][0]]+[" momentum "]+["%.2f"%mo_pc]+["active"])
csvout.close()
else:
print 'no momentum'
#part2 MACD analysis
csvout1 = open('stock_macd'+now.strftime("%Y-%m-%d")+".csv", 'a')
csvwrite1 = csv.writer(csvout1)
if MACD[2][-1]>1e-08 and MACD[2][-3]<MACD[2][-2]<MACD[2][-1]:
if MACD[0][-1]>MACD[1][-1] and MACD[1][-1]>0.0:
csvwrite.writerow([KLSEData [x][0]]+["Golden Cross"]+["MACD above 0"])
csvout.close()
else:
csvwrite.writerow([KLSEData [x][0]]+["Golden Cross"]+["MACD below 0"])
csvout.close()
else:
if MACD[0][-1]>MACD[1][-1] and MACD[1][-1]>0.0:
csvwrite.writerow([KLSEData [x][0]]+["No Cross"]+["MACD above 0"])
csvout.close()
else:
print "No MACD signal"
电流输出:
Stock,Mom,Pct,Liquidity
AAPL, momentum ,251.77,not active
AAPL,No Cross,MACD above 0
Stock,Mom,Pct,Liquidity
MSFT, momentum ,251.77,not active
MSFT,No Cross,MACD above 0
为什么你不在
数据框
中写入记录,然后在数据框
中写入数据,而不是使用writerow
?@RohanAmrute,如果我使用df.to(数据框)来解决我的问题呢?我建议你在数据框
中写入数据,而不是在csv文件中使用writeRohanamrute、'dataframe'和'writerow',有什么不同吗?请详细说明,因为我对此不熟悉。谢谢。我在csv中添加所需的输出以及当前输出。谢谢
Stock,Mom,Pct,Liquidity
AAPL, momentum ,251.77,not active
AAPL,No Cross,MACD above 0
Stock,Mom,Pct,Liquidity
MSFT, momentum ,251.77,not active
MSFT,No Cross,MACD above 0