【问题标题】:For loop only gives last result of for loopFor 循环只给出 for 循环的最后一个结果
【发布时间】:2022-01-16 11:56:34
【问题描述】:

我想打印数据直到 list_3 结束。但是,无论我如何尝试,我都只得到了 list_3 的最后一个结果。这是我的代码:

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)

我尝试在 for 循环中使用 for 循环获取结果,但是,第二个 for 循环只给出了 for 循环的最后一个结果。我应该进行哪些更改才能获得第二个 for 循环的所有结果?

※注意:for 循环的第二个缩进可能看起来不正确,但是,它工作得很好,没有任何错误。

【问题讨论】:

  • 您的第一个 for 循环没有执行任何指令,而您的第二个 for 循环正在执行一条指令:target_year = list_3[r]。正确缩进你的代码。并删除不必要的空行。
  • 对于第一个 for 循环的视觉效果感到抱歉。它看起来像是单独工作,但是它赋予了它底部代码行的价值。

标签: python for-loop


【解决方案1】:

问题在于 for 循环范围内没有 td.query('Date.dt.year == @target_year'),将查询部分移动到 for 循环范围内以处理所有 target_year。

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

另外,您可以将其优化为

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

【讨论】:

  • 感谢您的代码!我解决了我的问题。但是,又出现了一个问题。 for i in range(10) 用于将数据带入 ODD 列表。但是它只带来输入序列号的数据。我怎样才能带上所有的序列数据?
猜你喜欢
  • 2015-06-17
  • 2019-07-07
  • 2018-06-05
  • 2020-04-27
  • 2015-04-08
  • 1970-01-01
  • 2020-11-22
  • 2016-01-09
相关资源
最近更新 更多