Почему Pandas .floor() выдает AmbigiousTimeError для этой метки времени, которая уже однозначна?Python

Программы на Python
Ответить
Anonymous
 Почему Pandas .floor() выдает AmbigiousTimeError для этой метки времени, которая уже однозначна?

Сообщение Anonymous »

Следующее не удалось:

Код: Выделить всё

def round_in_tz(epoch_sec: int, tz_name: str, freq_spec: str):
"""Round the given epoch timestamp to the nearest pandas time frequency spec in the given timezone."""
return pd.to_datetime(epoch_sec, unit='s', utc=True).tz_convert(tz_name).floor(freq_spec)

print(round_in_tz(1730610000, "US/Eastern", freq_spec="86400s"))  # works OK
# raises pytz.exceptions.AmbiguousTimeError: Cannot infer dst time from 2024-11-03 01:00:00, try using the 'ambiguous' argument
print(round_in_tz(1730610000, "US/Eastern", freq_spec="300s"))
  • Есть ли здесь действительно какая-то двусмысленность? Я знаю о летнем времени, но использование эпохального времени позволяет избежать двусмысленности, верно? Это ошибка в Pandas?
  • Как лучше всего ее переписать? Я собрал следующее:

Код: Выделить всё

def round_in_tz(epoch_sec: int, tz_name: str, freq_spec: str):
"""Round the given epoch timestamp to the nearest pandas time frequency spec in the given timezone."""
t = pd.to_datetime(epoch_sec, unit='s', utc=True).tz_convert(tz_name)
is_dst = bool(t.timetuple().tm_isdst)
return t.floor(freq_spec, ambiguous=is_dst)
ПРИМЕЧАНИЕ. Мы не можем использовать .floor(freq_spec).tz_convert(tz_name), поскольку это меняет поведение, когда freq_spec="86400s". (Мне нужна полночь США/Восточная Европа, а не полночь UTC.)
Я нашел несколько предыдущих вопросов о неоднозначности летнего времени, но все они связаны с действительно неоднозначными ситуациями (например, анализом временной метки из строка в течение дважды повторяющегося часа летнего времени.) Напротив, в этом вопросе используется временная метка эпохи 1730610000, которая, как я ожидаю, не будет двусмысленной.

Подробнее здесь: https://stackoverflow.com/questions/792 ... thats-alre
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»