我有此代码:
print(df)
c = 900
count = 1
for i in df['Timestamp']:
if df['Timestamp'][i] >= c:
c+=900
count+=1
print('candles', count)
print(c)
它打印出这个
Timestamp A Bid A Ask B Bid B Ask Spread 1 Spread 2
0 0 1.22365 1.22371 1.22360 1.22374 11.0 9.0
1 0 1.22365 1.22371 1.22358 1.22369 13.0 4.0
2 0 1.22365 1.22371 1.22356 1.22368 15.0 3.0
3 0 1.22365 1.22371 1.22355 1.22367 16.0 2.0
4 1 1.22361 1.22363 1.22355 1.22367 8.0 6.0
... ... ... ... ... ... ... ...
148167 55791 1.22233 1.22237 1.22227 1.22239 10.0 6.0
148168 55791 1.22233 1.22237 1.22226 1.22239 11.0 6.0
148169 55791 1.22235 1.22237 1.22226 1.22239 11.0 4.0
148170 55792 1.22233 1.22237 1.22226 1.22239 11.0 6.0
148171 55793 1.22233 1.22236 1.22226 1.22239 10.0 6.0
[148172 rows x 7 columns]
candles 37
33300
因此,基本上,最大的时间戳是55793。因此应该有61支蜡烛导致55793/900〜61。 但是由于某些原因,即使显然值更大,for循环也会在c = 33300时停止。那么,这是什么问题?
答案 0 :(得分:0)
问题是您在从值中获取i
作为索引(应该上升到148171)(因此限制为55793)。
您想要的可能是:
for i in range(len(df)):
if df['Timestamp'][i] >= c:
c+=900
count+=1
这将是惯用的大熊猫:
for i, t in df['Timestamp'].items():
if t >= c:
c += 900
count += 1
答案 1 :(得分:0)
首先,仔细观察 for 语句。您会注意到您使用的是for i in df['Timestamp']
,而不是之类的for i in range(len(df['Timestamp']))
。这意味着您是在df['Timestamp']
中直接遍历这些项目,而不是通过这些项目的索引。
因此,当您在if语句中进行类似df['Timestamp'][i]
的操作时,实际上发生的是它返回位于第i 索引中的时间戳的值。这意味着在for循环的最后一次迭代中:
# Last item of df['Timestamp']
i = 55793
# Item (timestamp) at index 55793
df['Timestamp'][i] = 33300
如果时间戳记不是 int
类型,您将出现 Error将行if df['Timestamp'][i] >= c
替换为if i >= c
。另外,提供i
以外的变量名称将减少误以i
为索引的可能性。
希望这可以让您深入了解此代码段中发生的事情:)