You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Saída polars: campo que aceita date e datetime perde a hora quando a primeira resposta é só data #228
Com entrada polars, um campo que aceita data e data com hora perde a hora quando a primeira resposta é só data. A coluna sai Date, sem erro e sem aviso. Com entrada pandas, as duas respostas saem como vieram.
A resposta 2026-01-02 15:30 sai 2026-01-02. Na ordem inversa, com a data e hora primeiro, a conversão recusa a coluna: na main levanta ArrowTypeError depois das chamadas (#218), e com o #220 a coluna sai Object com os dois valores e o aviso.
Causa
pl.from_pandas infere o tipo da coluna de objetos pelo primeiro valor. Com date primeiro, o pyarrow monta uma coluna de datas e aceita o datetime seguinte truncando a hora, porque datetime é subclasse de date.
Proposta
É mais um caso de tipo decidido pelos dados e não pela anotação, como os da #219. Quando a anotação do campo admite datetime, a coluna sai Datetime, com a data pura à meia-noite, ou Object com aviso, se a distinção entre os dois tipos tiver de ser preservada. O teste é o trecho acima nas duas ordens.
A mesma troca calada acontece em outras uniões com data ou hora, reproduzida na main depois do #220, com polars 2.0.0. O pyarrow escolhe o tipo pelo primeiro valor e converte o inteiro seguinte em vez de recusar a coluna:
No primeiro, o inteiro fora do intervalo de um dia vira nulo (do polars 1.8.2 em diante; até a 1.7.1 vira time(0, 0)). No segundo, o inteiro 5 vira o quinto dia depois de 1970-01-01, em todas as versões testadas de 1.0.0 a 2.0.0. Com entrada pandas, os três valores saem como vieram.
A regra pela anotação resolve os três casos: quando a união do campo mistura tipos que o pyarrow converte entre si, a coluna não pode ser inferida pelos valores.
Mais dois casos da mesma família, agora dentro de estrutura, reproduzidos na main em c6e99a10 com polars 2.0.0. Os dois aparecem numa execução sem interrupção:
tuple[date, int] com (date(2026, 1, 2), 5)
List(Date) [[datetime.date(2026, 1, 2), datetime.date(1970, 1, 6)]] sem aviso
list[Union[date, datetime]] com [date(2026, 1, 2), datetime(2026, 1, 2, 10, 0)]
List(Date) [[datetime.date(2026, 1, 2), datetime.date(2026, 1, 2)]] sem aviso
No primeiro, o inteiro 5 vira o quinto dia depois de 1970-01-01. No segundo, a hora some. A revisão do #233 viu os dois no polars 1.0.0, 1.20.0 e 2.0.0.
Activity
bdcdo commentedon Oct 13, 2026
A mesma troca calada acontece em outras uniões com data ou hora, reproduzida na
maindepois do #220, com polars 2.0.0. O pyarrow escolhe o tipo pelo primeiro valor e converte o inteiro seguinte em vez de recusar a coluna:No primeiro, o inteiro fora do intervalo de um dia vira nulo (do polars 1.8.2 em diante; até a 1.7.1 vira
time(0, 0)). No segundo, o inteiro 5 vira o quinto dia depois de 1970-01-01, em todas as versões testadas de 1.0.0 a 2.0.0. Com entrada pandas, os três valores saem como vieram.A regra pela anotação resolve os três casos: quando a união do campo mistura tipos que o pyarrow converte entre si, a coluna não pode ser inferida pelos valores.
bdcdo commentedon Oct 14, 2026
Mais dois casos da mesma família, agora dentro de estrutura, reproduzidos na
mainemc6e99a10com polars 2.0.0. Os dois aparecem numa execução sem interrupção:No primeiro, o inteiro 5 vira o quinto dia depois de 1970-01-01. No segundo, a hora some. A revisão do #233 viu os dois no polars 1.0.0, 1.20.0 e 2.0.0.