Мой цикл while не останавливается, когда он должен. Очевидно, мне здесь не хватает чего-то фундаментального.
Вот мой код:
import time
import datetime
import pandas as pd
period = 5
start = pd.to_datetime('2022-01-01')
end_final = pd.to_datetime('2022-01-31')
sd = start
while start < end_final:
ed = sd + datetime.timedelta(period)
print('This is the start of a chunk')
print(sd)
print(ed)
print('This is the end of a chunk')
print('+*************************')
sd = ed + datetime.timedelta(2)
Который печатает даты до 10 апреля 2262 года, а затем выдает ошибку:
OverflowError: Python int too large to convert to C long
Но цикл while должен остановиться в конце января 2022 года. Есть идеи?
Ни start, ни end_final не меняются, так что это утверждение всегда верно
Возможно, вы хотели while sd < end_final?
Вы изменили sd вместо start, поэтому вы меняете только скопированное значение, хранящееся как sd, а не start, поэтому ваш цикл while проверяет одно и то же условие на каждой итерации.
Вы меняете переменную sd, но проверяете start, попробуйте:
sd = start
while sd < end_final:
# ...
Когда вы находитесь в «цикле while», вы должны добавить индикатор остановки, такой как флаг, условие или оператор break.
Вот идея разорвать цикл ближе к январю 2022 года.
period = 5
start = pd.to_datetime('2022-01-01')
end_final = pd.to_datetime('2022-01-31')
sd = start
flag = True
while flag:
ed = sd + datetime.timedelta(period)
print('This is the start of a chunk')
print(sd)
print(ed)
print('This is the end of a chunk')
print('+*************************')
sd = ed + datetime.timedelta(2)
if sd >= end_final:
flag = False
Однако конечная дата не 31 января 2022 года, потому что вы добавляете период = 5, поэтому в этом случае попробуйте с операторами «если».
Как вы собираетесь start < end_final стать ложным?