简体   繁体   English

For 循环只给出 for 循环的最后一个结果

[英]For loop only gives last result of for loop

I wanted to print out datas until list_3 is ended.我想打印数据直到 list_3 结束。 But, no matter how I tried, I only got last result of list_3.但是,无论我如何尝试,我都只得到了 list_3 的最后一个结果。 Here's my code:这是我的代码:

import FinanceDataReader as fdr 
import numpy as np
from numpy import NaN
import pandas as pd
import openpyxl 
....

pd.options.display.float_format = '{:.5f}'.format


file_list = os.listdir('/home/sejahui/projects/stock_data_excel')

list_1 = []
list_2 = []
list_3 =[ 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 ] 




for i in range(10): 



os.chdir('/home/sejahui/projects/stock_data_excel')
odd = file_list[i]

td = pd.read_excel('/home/sejahui/projects/stock_data_excel/'+str(odd))
td['Date'] = pd.to_datetime(td['Date'], format = '%Y-%m-%d' )



   for r in range(12):
      target_year = list_3[r]



data = td.query('Date.dt.year == @target_year')

'''
td['Year'] = td['Date'].dt.year
data = td.groupby(['Year'])
'''


def calMACD(data, short=5, long=25, signal=9):
    data.sort_index()
    
    data['MVA_25']=data['Close'].ewm(span=long, adjust=False).mean()
    data['MVA_5']=data['Close'].ewm(span=short, adjust=False).mean()
    data['MACD']=data['Close'].ewm(span=short, adjust=False).mean() - data['Close'].ewm(span=long, adjust=False).mean()
    data['Signal']=data['MACD'].ewm(span=signal, adjust=False).mean( )
    #data['Buy_sign']=(data['MACD']-data['Signal']) >=600
    data['Buy_sign']=np.where(data['MACD']-data['Signal'] >=451, 'Buy' , 'Sell' )
    #data['Target_1']=(data['Close']-data['Close'].shift(1))/data['Close'].shift(1)*100
    #data['Target_1']=np.where(data['Buy_sign']=='Buy', (data['Change'])+1,1)
    #data['Target_2']=np.where(data['Buy_sign']=='Sell', (data['Change'])+1,1)
    #data['Real_world']= 1000000*data['Target_1']
    #data['Real_world_2']= 1000000*data['Target_2'] 
    #data['Condition'] = np.where(data['Real_world']<1000000, data['Real_world']-data['Real_world'].shift(-2),1)
    ##data['Condition_2'] = np.where(data['Real_world']<1000000, data['Target_1'].shift(-2),1)
    #data['Moneyflow'] = 
    #plt.plot(data['Date'], data['Real_world'])
    #data[data.Buy_sign !='Sell']
    
    


    return data
print(calMACD(data), odd)

I tried to get results with for loop in for loop, but, second for loop only gives the last result of for loop.我试图在 for 循环中使用 for 循环获得结果,但是,第二个 for 循环只给出了 for 循环的最后一个结果。 What changes should I make to get all the results of second for loop?我应该进行哪些更改才能获得第二个 for 循环的所有结果?

※note: the second for loop indentation might looks uncorrect, but, it works perfectly fine without any error. ※注意:第二个 for 循环缩进可能看起来不正确,但它工作得很好,没有任何错误。

Problem is with not having td.query('Date.dt.year == @target_year') in for loop scope, move the query part in for loop scope to get all the target_year processed.问题在于 for 循环 scope 中没有td.query('Date.dt.year == @target_year') ,将查询部分移动到 for 循环 scope 中以处理所有 target_year。

for r in range(12):
    target_year = list_3[r]
    data = td.query('Date.dt.year == @target_year')

Also, you can optimized it to此外,您可以将其优化为

for target_year in list_3:
    data = td.query('Date.dt.year == @target_year')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM