Por que pd.to_datetime('2025175', format='%Y%W%w')
e pd.Timestamp.fromisocalendar(2025, 17, 5)
dá resultados diferentes?
Eu esperava obter sucesso Timestamp('2025-04-25 00:00:00')
em ambos os casos. Mas a primeira abordagem resultou numa sexta-feira, uma semana antes.
Exemplo mínimo
import pandas as pd
friday_datetime = pd.to_datetime('2025175', format='%Y%W%w')
friday_timestamp = pd.Timestamp.fromisocalendar(2025, 17, 5)
assert friday_datetime == friday_timestamp, (friday_datetime, friday_timestamp)
Saída:
assert friday_datetime == friday_timestamp, (friday_datetime, friday_timestamp)
AssertionError: (Timestamp('2025-05-02 00:00:00'), Timestamp('2025-04-25 00:00:00'))
Existem diferentes maneiras de calcular a semana do ano
fromisocalendar
usa o padrão ISO, onde a semana 1 é a semana que contém 4 de janeiro . Ou, em outras palavras, a primeira semana que contém pelo menos 4 dias do ano novo .%W
usa a semana que contém a primeira segunda-feira do ano como semana 1. Todos os dias anteriores a esta são considerados semana 0.Para 2025, esses dois métodos de contagem de semanas apresentam resultados diferentes. Ou seja, a semana 1 em ISO é de 30/12/2024 a 05/01/2025, enquanto a semana 1, seguindo
%W
a lógica, é de 06/01/2025 a 12/01/2025. Portanto, sua semana 17 tambémto_datetime
está uma semana à frente.Se você quiser
pd.to_datetime
se comportar da mesma forma quepd.Timestamp.fromisocalendar
use%V
como especificador de formato em vez de%W
.Veja também a documentação