python循环嵌套问题---变量初始化的位置不能错!

在编写获取股票特征的代码时,遇到了嵌套循环的问题。原本期望通过两个循环生成5*3个列的DataFrame,但实际上只得到了3列。问题出在外部for循环中变量i的初始化位置,它在内部while循环后变成了day-1,导致后续循环无法正确执行。解决方案是将i=0的初始化移到for循环内部,修复后的代码成功生成了预期的列名。
摘要由CSDN通过智能技术生成

之前写一个获取股票特征的代码,需要用到嵌套循环,分别获取特征的名字和向前回溯的天数,代码如下:

i = 0
day = 3
d = {}
f = ''
fls = df2.columns.values.tolist()#获取原始dataframe的列名。
for f in fls:
	while i < day:#day是向前回溯的天数。
        d['last_{}_{}'.format(f,i+1)] = df2[f].iloc[len(df2)-(len(df2)-i):len(df2)-(day-i)]#将列名和天数加以组合,作为字典的键。
        i += 1
feature = pd.DataFrame(d)
print (feature)

fls列表一共有[‘open’, ‘close’, ‘high’, ‘low’, ‘volume’]五个字符串,想象中运行后会出现5*3个列的dataframe,分别为:
‘last_open_1’,
‘last_open_2’,
‘last_open_3’,
‘last_close_1’,
‘last_close_2’,
‘last_close_3’,
‘last_high_1’,
‘last_high_2’,
‘last_high_3’,
‘last_low_1’,
‘last_low_2’,
‘last_low_3’,
‘last_volume_1’,
‘last_volume_2’,
‘last_volume_3’

然而运行结果如下:

 last_open_1  last_open_2  l
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值