Datas e séries temporais com pandas

Aprenda a trabalhar com datas e horas no pandas. Interprete datas em texto sem confundir dia e mês, construa um índice temporal, selecione qualquer dia, mês ou horário e compare valores com os anteriores. Gere sequências regulares de datas, desloque datas segundo regras de calendário e trabalhe com meses, trimestres e anos fiscais como períodos. Reamostre dados para obter totais diários, semanais ou mensais, preencha lacunas, suavize séries com janelas móveis, expansivas e exponencialmente ponderadas e trate fusos horários e horário de verão. Os exemplos usam pandas 3 e dados cotidianos, como leituras de energia, temperaturas, vendas de lojas e visitas a sites.

IntermediárioAula 6 de 8 do curso Curso de Análise de dados com Python

O que você vai aprender

  1. Armazene momentos e durações nos tipos de data e hora do pandas, interprete datas em texto sem confundir dia e mês e extraia componentes do calendário, como mês e dia da semana.
    • Trabalhar com marcas temporais, durações e componentes do calendário
      Use Timestamp, Timedelta e o tipo de dados datetime64, calcule o tempo entre eventos e extraia componentes como ano, hora e dia da semana com o acessor .dt.
    • Interpretar datas em texto e formatá-las para saída
      Converta texto e números em datas e horas com pd.to_datetime, escolha formatos para nunca trocar dia e mês, trate valores que não podem ser interpretados e converta datas e horas novamente em texto legível.
  2. Construa um índice temporal limpo e ordenado, use-o para selecionar qualquer dia, mês ou janela de tempo e compare cada valor com valores anteriores.
    • Construir e verificar um índice temporal
      Transforme uma coluna de datas e horas em um DatetimeIndex ordenado, trate marcas temporais duplicadas e identifique lacunas e a frequência de uma série.
    • Selecionar linhas por data e horário do dia
      Selecione anos, meses, dias e intervalos inteiros com strings de data, filtre por dia da semana ou horário e evite enganos que retornam linhas erradas.
    • Comparar valores ao longo do tempo com deslocamentos, diferenças e variações percentuais
      Defase e antecipe valores, calcule variações e taxas de crescimento e entenda como o pandas alinha duas séries temporais por data.
  3. Crie sequências regulares de datas, desloque datas segundo regras de calendário como “um mês depois” ou “próximo dia útil” e trabalhe com meses, trimestres e anos fiscais completos como períodos.
    • Criar sequências regulares de datas com códigos de frequência
      Gere sequências de datas e horas com pd.date_range, escolha o código de frequência adequado e obtenha corretamente a primeira e a última data.
    • Deslocar datas segundo regras de calendário
      Distinga durações fixas de regras de calendário e use DateOffset e outros deslocamentos, como os de fim de mês e dia útil, para deslocar datas corretamente.
    • Trabalhar com meses, trimestres e anos fiscais completos como períodos
      Represente intervalos de tempo com Period e PeriodIndex, converta entre marcas temporais e períodos e trate trimestres de um ano fiscal.
  4. Agregue dados detalhados em totais e médias diários, semanais, mensais ou trimestrais, preencha uma grade temporal mais fina e reamostre várias séries de uma vez.
    • Reduzir a frequência temporal para obter totais, médias e outros resumos
      Use resample para agregar dados em intervalos de agrupamento temporal mais amplos, escolha a agregação adequada e interprete corretamente os limites e rótulos dos intervalos.
    • Aumentar a frequência temporal e preencher lacunas em uma série temporal
      Mova dados para uma grade temporal mais fina, preencha novas posições propagando valores para a frente ou para trás ou por interpolação e revele datas ausentes.
    • Reamostrar várias séries de uma vez usando grupos
      Reamostre por grupo uma tabela no formato longo com muitas lojas, sensores ou clientes e remodele o resultado para comparação.
  5. Calcule médias móveis e outras estatísticas de janela sobre um número de linhas ou um intervalo de tempo, além de totais acumulados e médias ponderadas que acompanham todo o histórico.
    • Calcular estatísticas móveis sobre um número fixo de linhas
      Use rolling(n) para médias móveis, somas e outras estatísticas, controle janelas incompletas e aplique janelas por grupo.
    • Usar janelas baseadas no tempo para dados irregulares
      Defina janelas por um intervalo de tempo como “7D”, entenda quais observações cada janela inclui e escolha entre janelas baseadas em linhas e no tempo.
    • Acompanhar totais acumulados, máximos acumulados e médias exponencialmente ponderadas
      Use janelas expansivas para estatísticas acumuladas e quedas em relação ao máximo acumulado, e médias exponencialmente ponderadas que dão mais peso aos valores recentes.
  6. Atribua o fuso horário correto a marcas temporais, converta entre fusos, combine dados de fusos diferentes e trate as horas que o horário de verão pula ou repete.
    • Atribuir fusos horários a marcas temporais e converter entre fusos
      Distinga marcas temporais sem e com fuso horário, atribua um fuso com tz_localize, converta com tz_convert e combine dados registrados em fusos diferentes.
    • Tratar o horário de verão em séries temporais
      Reconheça horas locais puladas e repetidas, atribua-lhes fusos de forma deliberada e reamostre e desloque corretamente em dias que têm 23 ou 25 horas.

Guia de estudo de Séries temporais com pandas

6 capítulos

1

Converter datas e horas em dados que o pandas pode usar em cálculos

Datas chegam como strings, números e leituras de relógio, mas a análise precisa de uma representação consistente. Aprenda a transformar essas entradas em momentos e durações, verificar conversões que falharam e ler componentes úteis do calendário. Os exemplos distinguem uma data e hora armazenada de seu texto de exibição, para que a ordenação, a seleção e a aritmética posteriores usem o significado de calendário. Pequenos detalhes, como códigos de formato de mês e minuto e resolução de armazenamento, podem alterar bastante um resultado.

1.1 Trabalhar com marcas temporais, durações e componentes do calendário

Uma data é mais útil quando o pandas sabe que ela é uma data. Uma série temporal associa observações a momentos ou intervalos de tempo. Leituras horárias de energia formam uma série regular; pedidos que chegam em intervalos desiguais formam uma série irregular. Um texto como “12/31/2024” pode ser ordenado depois de “03/01/2025”, embora dezembro tenha vindo antes. Strings ISO completas e consistentes são ordenadas corretamente, mas valores de data e hora também permitem seleção por calendário e aritmética.

Escolha o objeto de tempo adequado

O Python fornece datetime, date e timedelta. No pandas, um Timestamp contém um momento, uma coluna de datas e horas tem um tipo de dados datetime64[unit], e um DatetimeIndex contém rótulos de linha de data e hora. NaT indica uma data ou hora ausente. Detecte-o com pd.isna(); subtrair uma data ou hora ausente produz outra data ou hora ausente.

A unidade em datetime64[us] é microssegundos, a resolução de armazenamento. Outras unidades incluem segundos (s), milissegundos (ms) e nanossegundos (ns). O pandas 3 normalmente interpreta texto com resolução de microssegundos, usando nanossegundos quando o texto precisa deles. Uma resolução mais fina usa mais do intervalo de inteiros: datas em nanossegundos vão apenas de 1677 a 2262.

Calcule o tempo decorrido
import pandas as pd
start = pd.Timestamp("2025-03-10 18:00")
end = pd.Timestamp("2025-03-14 09:30")
elapsed = end - start
hours = elapsed / pd.Timedelta(hours=1)

elapsed é 3 dias, 15 horas e 30 minutos. Os três dias contribuem com 72 horas, então hours é 87,5. elapsed.total_seconds() fornece 315.000. Seu atributo .days fornece apenas 3; ele é o componente de dias inteiros, não a duração completa em dias. Construa durações com pd.Timedelta(hours=36) ou interprete várias com pd.to_timedelta(["1h", "90min"]).

Subtrair uma marca temporal de uma coluna inteira de datas e horas produz durações linha a linha. Use .dt.days para componentes de dias inteiros ou divida a coluna de durações por um Timedelta de uma unidade para obter totais fracionários.

Leia componentes do calendário e arredonde horários

Em uma coluna, .dt.year, .dt.month, .dt.hour e .dt.quarter extraem componentes do calendário. .dt.day_of_week numera segunda-feira como 0 até domingo como 6; .dt.day_name() fornece um nome. 14 de março de 2025 é sexta-feira, número 4. Um índice usa esses atributos diretamente: df.index.month. As grafias day_of_week e day_of_year substituem grafias antigas marcadas como obsoletas no pandas 3.1.

Um dia da semana pode se tornar uma chave de agrupamento: df.groupby(df["timestamp"].dt.day_name())["kwh"].mean(). Agrupar pelo número do mês combina esse mês de anos diferentes; um período mensal mantém cada ano separado.

Para 09:37, .dt.floor("h") fornece 09:00, .dt.ceil("h") fornece 10:00 e .dt.round("15min") fornece 09:30. .dt.normalize() define os horários como meia-noite e mantém os valores de data e hora. .dt.date produz objetos de data do Python e perde recursos de uma coluna de datas e horas.

Mantenha explícitas as unidades numéricas

astype("int64") retorna contagens na própria unidade da coluna. Uma contagem em microssegundos é 1.000 vezes menor que a contagem em nanossegundos para o mesmo momento. Se um cálculo externo precisar de nanossegundos, use s.dt.as_unit("ns").astype("int64"); um Timestamp ou índice usa .as_unit("ns") diretamente. Para tempo decorrido, a aritmética de Timedelta evita essa armadilha de unidade.

Principais conclusões

  • Um Timestamp é um momento; um Timedelta é tempo decorrido.
  • Use Timedeltas de uma unidade para obter durações completas, inclusive frações.
  • Atributos de calendário usam .dt em colunas e acesso direto em índices.
  • Datas e horas ausentes são NaT.
  • Contagens inteiras de datas e horas dependem da resolução de armazenamento.

1.2 Interpretar datas em texto e formatá-las para saída

A interpretação dá ao texto um significado de calendário. Antes de converter uma coluna de datas, estabeleça seu formato e verifique se ela contém deslocamentos, entradas inválidas ou valores ausentes. ISO 8601 escreve o ano primeiro, como em “2025-03-14T09:30:00”, e evita a ambiguidade entre dia e mês.

Informe o formato de origem

“03/04/2025” pode significar 4 de março ou 3 de abril. pd.to_datetime("03/04/2025") lê o mês primeiro; dayfirst=True lê o dia primeiro. Um formato conhecido é mais claro:

raw = pd.Series(["14/03/2025 18:45", "15/03/2025 09:00"])
parsed = pd.to_datetime(raw, format="%d/%m/%Y %H:%M")

%Y é um ano de quatro dígitos, %m um mês e %d um dia. %H é uma hora em relógio de 24 horas, %M um minuto e %S um segundo. Use %I com %p para um relógio de 12 horas e AM/PM. %b e %B leem nomes abreviados e completos de meses. %M maiúsculo significa minutos, portanto não pode substituir %m minúsculo para meses.

Sem format, o pandas infere um formato a partir da primeira entrada não ausente e o aplica à coluna. Com “03/04/2025” primeiro, um “13/04/2025” posterior falha sob a inferência de mês primeiro. Reordenar as linhas pode mudar o formato inferido. format="ISO8601" trata variantes ISO. format="mixed" interpreta as entradas individualmente, mas não resolve uma convenção ambígua na origem; limpe ou verifique essa convenção primeiro.

Inspecione conversões que falharam
raw = pd.Series(["2025-01-15", "not a date", None])
parsed = pd.to_datetime(raw, format="%Y-%m-%d", errors="coerce")
failed = parsed.isna() & raw.notna()

O resultado contém 15 de janeiro e dois valores NaT. parsed.isna().sum() é 2 porque inclui a entrada originalmente ausente. failed.sum() é 1 porque apenas “not a date” estava presente e falhou. Inspecione raw[failed] antes de decidir corrigir ou remover o valor. A coerção permite que um carregamento continue, mas também oculta erros de digitação, como um mês impossível. O padrão errors="raise" interrompe a operação em uma entrada inválida; o pandas 3 removeu errors="ignore".

Interprete arquivos e marcas temporais numéricas

pd.read_csv("meter.csv", parse_dates=["timestamp"], index_col="timestamp") solicita a interpretação de datas e horas e um índice temporal. Verifique os tipos de dados resultantes após o carregamento. Colunas de texto no pandas 3 usam o tipo str; versões anteriores normalmente mostram object.

Una strings separadas de data e hora com um espaço antes da interpretação. Colunas chamadas year, month e day podem ser reunidas diretamente com pd.to_datetime(df[["year", "month", "day"]]).

Para contagens Unix, especifique a unidade. pd.to_datetime(1735689600, unit="s", utc=True) fornece meia-noite UTC em 1º de janeiro de 2025. A contagem em milissegundos é 1735689600000 com unit="ms". Usar a unidade errada altera o momento interpretado.

Formate apenas para apresentação

parsed.dt.strftime("%d %b %Y") escreve textos como “15 Jan 2025”. O método .isoformat() de um Timestamp escreve uma string ISO. Nomes de meses e dias da semana seguem a configuração regional do sistema; os exemplos exibidos usam inglês. Mantenha datas e horas durante a análise e formate na exportação, pois strings deixam de permitir aritmética de datas.

Principais conclusões

  • Prefira datas ISO sem ambiguidade quando controlar a origem.
  • Informe explicitamente um formato de interpretação conhecido.
  • Separe entradas inválidas de valores que já estavam ausentes.
  • Associe contagens Unix à sua unidade de segundos ou milissegundos.
  • Formate como texto ao final da análise.
  • %m significa mês; %M significa minuto.
2

Indexar, selecionar e comparar dados pelo tempo

Um índice temporal torna as datas utilizáveis como rótulos de linha, mas os rótulos precisam ser verificados com cuidado antes da comparação. Ordene observações, decida o que significam marcas temporais duplicadas e revele datas ausentes. Depois, selecione períodos do calendário ou janelas recorrentes de horário e compare valores com os anteriores. A distinção central é entre posição da linha e tempo real: uma linha anterior pode estar vários dias antes, e duas séries se combinam por marcas temporais correspondentes.

2.1 Construir e verificar um índice temporal

Um índice temporal útil é interpretado, ordenado e verificado. Uma tabela pode conter vários eventos no mesmo momento, dias ausentes ou lotes fora de ordem. Cada condição altera o significado dos cálculos posteriores.

Construa rótulos de linha de data e hora
df["timestamp"] = pd.to_datetime(df["timestamp"], format="%Y-%m-%d %H:%M")
df = df.set_index("timestamp").sort_index()

set_index() move a coluna para os rótulos de linha; ele não interpreta texto. Inspecione df.index.dtype para verificar se é um tipo de data e hora e df.index.is_monotonic_increasing para verificar a ordem cronológica. Horários vizinhos iguais são permitidos em um índice crescente, então essa verificação não estabelece a unicidade.

Um DatetimeIndex permite seleção por data e reamostragem temporal. Rótulos de texto não se tornam um índice temporal apenas porque parecem datas. Você também pode deixar marcas temporais em uma coluna: df.resample("D", on="timestamp") usa essa coluna sem alterar o índice. Um PeriodIndex é outra representação de série temporal quando as linhas descrevem intervalos como meses.

Decida o significado de horários repetidos

df.index.is_unique informa se todos os rótulos são diferentes. df.index.duplicated() marca rótulos repetidos após o primeiro. Suponha que duas leituras, 3 e 5, compartilhem 1º de janeiro e uma leitura de 4 pertença a 2 de janeiro. Calcular a média das leituras duplicadas com df.groupby(level=0).mean() produz 4,0 em ambas as datas.

Essa operação é uma decisão sobre os dados. Se as linhas forem compras separadas, somar pode ser adequado. Se uma importação duplicou um registro, manter a última cópia com df[~df.index.duplicated(keep="last")] pode ser adequado. Não exclua transações válidas apenas para tornar um índice único. Operações que colocam um valor em cada rótulo de destino, incluindo reindex() e asfreq(), exigem rótulos de origem únicos.

Distinga frequência armazenada de inferida

Um índice criado por pd.date_range() normalmente contém .freq. Marcas temporais interpretadas frequentemente têm .freq igual a None, mesmo quando ocorrem em dias consecutivos. pd.infer_freq(df.index) examina pelo menos três marcas temporais e retorna um código como “D” ou “ME” se encontrar um padrão regular. Espaçamento irregular retorna None.

Metadados de frequência não são uma verificação de completude. Para procurar linhas diárias ausentes, construa o calendário esperado:

calendar = pd.date_range(df.index.min(), df.index.max(), freq="D")
missing = calendar.difference(df.index)

Um dia ausente não tem linha. Ele difere de uma linha presente que contém NaN. Um calendário limitado ao mínimo e ao máximo observados não pode revelar datas ausentes fora desse intervalo; use o início e o fim planejados do período de relatório quando forem conhecidos.

Prepare-se para operações posteriores

A ordenação torna as fatias previsíveis e é necessária para janelas móveis baseadas no tempo. Linhas ausentes importam mesmo quando um cálculo é bem-sucedido: shift(1) significa uma linha para trás, e rolling(7) significa sete linhas. Nenhum dos dois verifica se cada linha representa um dia. Em uma tabela no formato longo, mantenha também a chave da série, como sensor ou loja, para que operações posteriores possam ser executadas separadamente por série.

Principais conclusões

  • Interprete antes de definir o índice temporal e ordene-o.
  • Verifique a ordenação e a unicidade separadamente.
  • Trate rótulos duplicados de acordo com o que suas linhas representam.
  • Compare com um calendário completo para encontrar datas ausentes.

2.2 Selecionar linhas por data e horário do dia

Quando o índice contém datas e horas ordenadas, strings de data se tornam seletores úteis. Sua precisão controla quanto tempo elas representam: um ano, um mês, um dia ou um minuto específico.

Selecione um período completo do calendário

Para dados diários de janeiro a março de 2025, ts.loc["2025"] seleciona todos os 90 dias. ts.loc["2025-02"] seleciona os 28 dias de fevereiro. Em dados horários, uma string de dia seleciona o dia inteiro, não apenas a meia-noite.

Use .loc também em um DataFrame:

february = df.loc["2025-02", "kwh"]
spring_onward = df.loc["2025-03-01":]

df["2025-02"] pede uma coluna com esse nome. A presença de um índice temporal não transforma a seleção de colunas por colchetes em seleção de linhas.

Interprete o extremo com precisão

Uma fatia por rótulos inclui ambos os extremos. ts.loc["2025-01-30":"2025-02-02"] inclui 30 e 31 de janeiro e 1º e 2 de fevereiro. Uma fatia por posições como ts.iloc[0:4] para antes da posição 4.

O fim de uma fatia por string parcial inclui todo o período nomeado. Em dados horários, df.loc[:"2025-06-01"] inclui todo o dia 1º de junho. df.loc[:"2025-06-01 00:00"] para à meia-noite. Da mesma forma, uma fatia terminada em “2025-02” inclui todo o mês de fevereiro. Escolher uma string mais precisa muda o limite, então escreva o ponto de corte conforme a pergunta.

ts.truncate(before="2025-03-01") mantém de 1º de março em diante. Seu argumento after= corta o outro extremo. Ordenar primeiro evita falhas que podem ocorrer quando fatias por strings de data encontram rótulos não ordenados.

Selecione condições recorrentes do calendário

Atributos do calendário produzem máscaras booleanas:

weekends = df[df.index.day_of_week >= 5]
evening_march = df[(df.index.month == 3) & (df.index.hour >= 18)]

Segunda-feira é 0, então sábado e domingo são 5 e 6. Cada condição precisa de parênteses quando combinada com & ou |. Com uma coluna de datas e horas, use df["timestamp"].dt.day_of_week em vez de um atributo do índice. A máscara de dia da semana seleciona um padrão recorrente do calendário; isso difere da seleção de um intervalo contínuo de datas.

Selecione uma janela de horário em cada data

df.between_time("09:00", "17:00") seleciona esses horários todos os dias. Ambos os extremos são incluídos por padrão, fornecendo nove linhas em um dia completo de dados horários. inclusive="left" inclui 09:00 e exclui 17:00, fornecendo oito. df.at_time("12:00") seleciona exatamente o meio-dia de cada dia.

Uma janela de horário pode atravessar a meia-noite. between_time("22:00", "06:00") seleciona linhas do fim da noite e do início da manhã ao longo do índice. Ela não seleciona um intervalo ininterrupto entre duas datas específicas. Em um índice com fuso horário, a seleção por string de data usa o fuso local do índice; converta o índice antes de selecionar um dia de relatório em outro fuso.

Principais conclusões

  • Uma string de data parcial seleciona todo o seu período.
  • Fatias por rótulos incluem o extremo; fatias por posições excluem a posição final.
  • Use .loc para selecionar datas em um DataFrame.
  • Máscaras de calendário e janelas de horário selecionam padrões recorrentes.
  • Verifique a precisão do extremo e o fuso horário antes de filtrar.

2.3 Comparar valores ao longo do tempo com deslocamentos, diferenças e variações percentuais

Uma variação precisa de um ponto de comparação claro. “Anterior” pode significar a linha observada anterior, o dia de calendário anterior ou o mesmo mês um ano antes. Escolha esse significado antes de calcular uma defasagem ou taxa de crescimento.

Coloque valores anteriores ao lado dos atuais

Para contagens de visitantes 200, 210 e 189 de 3 a 5 de março, s.shift(1) fornece NaN, 200 e 210. Ele move os valores uma linha para baixo e mantém os rótulos. A nova primeira posição fica ausente porque não existe observação anterior. shift(-1) fornece 210, 189 e NaN: uma antecipação que traz o próximo valor para a linha atual.

df["previous"] = df["visitors"].shift(1)
df["change"] = df["visitors"].diff()
df["growth"] = df["visitors"].pct_change()

diff() subtrai o valor anterior, fornecendo NaN, 10 e −21. pct_change() divide o valor atual pelo anterior e subtrai 1, fornecendo NaN, 0,05 e −0,10. São frações: 0,05 significa 5%, não 0,05%. A saída em ponto flutuante pode ter pequenos dígitos extras; arredonde para exibição após calcular.

Escolha a defasagem em linhas ou em tempo

pct_change(7) compara com sete linhas antes. Isso corresponde ao mesmo dia da semana anterior somente quando há exatamente uma linha por dia, sem lacunas. Em uma série mensal completa, pct_change(12) fornece a variação em relação ao ano anterior.

shift(1, freq="D") desloca as marcas temporais um dia para a frente e mantém os valores associados a esses rótulos deslocados. Ele mantém todos os valores. A aritmética com a original então alinha por data:

previous_day = s.shift(1, freq="D")
daily_change = s - previous_day

Se a origem tiver observações apenas na segunda e na quinta-feira, um shift(1) simples compara quinta-feira com segunda-feira. Um deslocamento de data permite comparar com quarta-feira; se quarta-feira estiver ausente, a variação diária de quinta-feira fica ausente. Preencher essa lacuna é uma decisão separada sobre os dados.

Espere que a aritmética alinhe os rótulos

Duas Series se combinam por marca temporal, não por posição da linha. Some os valores 200, 210 e 189 em 3, 4 e 5 de março aos valores 1 e 1 em 4 e 7 de março. Apenas 4 de março tem duas observações, então sua soma é 211. A união das datas é 3, 4, 5 e 7 de março; os outros resultados estão ausentes.

Use s.add(other, fill_value=0) quando uma observação ausente realmente significar zero, como em uma contagem de eventos verificada. Isso não é uma correção geral para leituras ausentes de sensores.

Reinicie as comparações por série

Ordene uma tabela no formato longo pela chave da série e pela data e, depois, calcule dentro dos grupos. df.groupby("store")["sales"].pct_change() compara cada loja apenas com ela mesma. Para a loja A vendendo 100 e depois 110 e a loja B vendendo 50 e depois 40, as taxas de crescimento são ausente, 0,10, ausente e −0,20. Um cálculo simples em toda a coluna compararia a primeira venda de B com a última venda de A. Esse resultado numérico descreveria uma troca de lojas, não crescimento ao longo do tempo.

Principais conclusões

  • Uma defasagem move valores anteriores para junto de valores posteriores.
  • pct_change() retorna uma fração; multiplique por 100 para expressar uma porcentagem.
  • Deslocamentos de linha e de data respondem a perguntas diferentes.
  • A aritmética alinha marcas temporais, não posições.
  • Calcule variações separadamente dentro de cada série.
3

Gerar datas e usar frequências, deslocamentos e períodos

Regras de calendário tornam confiável o trabalho repetido com datas. Gere uma sequência completa a partir de uma frequência, desloque para o próximo fim de mês ou dia útil e rotule meses ou trimestres completos com períodos. Cada representação responde a uma pergunta diferente: uma duração conta o tempo decorrido, um deslocamento segue uma regra de calendário e um período nomeia um intervalo. Interpretar âncoras e extremos com cuidado evita erros de uma unidade e confusões entre anos fiscais.

3.1 Criar sequências regulares de datas com códigos de frequência

Uma sequência regular de datas é um calendário que você pode gerar em vez de digitar cada rótulo. Ela pode rotular dados de teste, definir uma grade esperada para relatórios ou revelar observações ausentes após a reindexação.

Especifique um início e uma regra
ends = pd.date_range("2025-01-01", periods=4, freq="ME")

As quatro marcas temporais são 31 de janeiro, 28 de fevereiro, 31 de março e 30 de abril. “ME” significa fim do mês, então a primeira data é o primeiro fim de mês igual ou posterior ao início. Uma frequência regular pode seguir uma regra de calendário mesmo quando os intervalos de tempo decorrido têm durações diferentes.

Normalmente, informe dois entre start, end e periods, além de freq. Sem uma frequência explícita, o padrão é um dia de calendário. periods é uma contagem de marcas temporais, não de intervalos entre elas: quatro marcas temporais horárias contêm três intervalos.

Interprete códigos comuns
RegraCódigoExemplo de uso
Dia de calendário ou útilD, BDatas diárias ou de segunda a sexta-feira
Semana em um dia âncoraW, W-MONDomingos ou segundas-feiras
Limite do mêsMS, MEPrimeiro ou último dia do calendário
Limite do trimestreQS, QEInício ou fim do trimestre
Limite do anoYS, YEInício ou fim do ano
Intervalo fixo de relógioh, min, s, msDe horas a milissegundos

Múltiplos expressam intervalos mais amplos: “15min”, “2h” e “90min”. Começar às 08:00 com quatro períodos de “90min” fornece 08:00, 09:30, 11:00 e 12:30. “1h30min” expressa o mesmo espaçamento.

As frequências de marcas temporais do pandas 3 usam “ME”, “QE”, “YE”, “BME”, “h”, “min”, “s”, “ms” e “us”. Os códigos antigos “M”, “Q”, “Y” ou “A”, “BM”, “H”, “T”, “S”, “L” e “U” não funcionam mais nessas operações com marcas temporais. Períodos mensais ainda usam “M” porque um período descreve um intervalo.

Siga âncoras e dias úteis

Uma sequência ancorada não força o início informado a aparecer na saída. Começar em 15 de janeiro de 2025 com freq="MS" fornece 1º de fevereiro primeiro. Em janeiro de 2025, “W-MON” fornece 6, 13, 20 e 27 de janeiro; “W” simples fornece domingos. “WOM-3FRI” significa a terceira sexta-feira de cada mês.

“B” pula fins de semana, mas não conhece feriados locais. Março de 2025 contém 21 datas de segunda a sexta-feira. Um calendário personalizado pode excluir um feriado informado:

pd.bdate_range("2025-03-01", "2025-03-31",
               freq="C", holidays=["2025-03-17"])

Essa sequência contém 20 datas. A lista de feriados é explícita; um país não é inferido a partir de um fuso horário ou idioma.

Conte os extremos com cuidado

Os pontos de início e fim que coincidem com a frequência são incluídos por padrão. Uma sequência horária da meia-noite de 1º de janeiro até a meia-noite de 2 de janeiro fornece 25 marcas temporais. Use periods=24 para exatamente 24 leituras horárias, ou inclusive="left" para excluir o fim. normalize=True redefine os horários de início e fim para a meia-noite. Adicione tz="Asia/Tokyo" quando os rótulos gerados precisarem conter um fuso.

Principais conclusões

  • Códigos de frequência expressam intervalos de relógio ou âncoras de calendário.
  • Uma sequência ancorada começa na primeira data correspondente.
  • Sequências de dias úteis precisam de feriados explícitos.
  • Conte as marcas temporais e verifique a inclusão dos extremos separadamente.
  • Use os códigos atuais do pandas 3 para frequências de marcas temporais.

3.2 Deslocar datas segundo regras de calendário

“Um mês depois” é uma instrução de calendário. “Trinta dias depois” é tempo decorrido. Os resultados podem ser diferentes porque meses e anos não têm todos o mesmo número de dias.

Separe duração de deslocamento no calendário

Um Timedelta adiciona uma quantidade fixa de tempo decorrido. Um DateOffset segue componentes do calendário. A partir de 31 de janeiro de 2025:

t = pd.Timestamp("2025-01-31")
t + pd.DateOffset(months=1)   # February 28
t + pd.Timedelta(days=30)    # March 2

Para o DateOffset, primeiro avance para fevereiro e depois mantenha o dia 31 se ele existir. Como não existe, o pandas ajusta para o último dia válido de fevereiro. A partir de 31 de janeiro de 2024, o resultado é 29 de fevereiro porque é um ano bissexto. pd.Timedelta(months=1) é inválido: um mês não tem uma única duração fixa.

A mesma distinção se aplica a anos. A partir de 1º de janeiro de 2024, 365 dias decorridos terminam em 31 de dezembro de 2024. pd.DateOffset(years=1) termina em 1º de janeiro de 2025. Use a unidade indicada pela pergunta real em vez de substituí-la por um número conveniente de dias.

Desloque para uma âncora de calendário

pd.offsets.MonthEnd(1) desloca para o próximo fim de mês. Começando em 15 de janeiro de 2025, fornece 31 de janeiro. Começando em 31 de janeiro, fornece 28 de fevereiro. A contagem de um significa avançar para uma âncora, então uma data que já corresponde também se desloca.

MonthEnd(0) desloca uma data para a frente até o fim de seu mês atual, mas mantém inalterada uma data que já é fim de mês. É útil para rotular cada observação pelo fim de seu mês:

month_labels = df.index + pd.offsets.MonthEnd(0)

Um deslocamento também tem rollforward() e rollback(). Para 15 de janeiro, a âncora de MonthEnd mais próxima à frente é 31 de janeiro e a mais próxima atrás é 31 de dezembro de 2024. Essas operações selecionam a âncora válida mais próxima em uma direção.

Avance por dias úteis

14 de março de 2025 é sexta-feira. Somar pd.offsets.BDay(1) fornece segunda-feira, 17 de março. Somar um dia decorrido fornece sábado, 15 de março. Uma regra padrão de dias úteis pula fins de semana; para feriados, é necessário fornecer explicitamente um calendário personalizado.

Strings de frequência são nomes curtos para objetos de deslocamento: “ME” corresponde a MonthEnd, “B” a BusinessDay e “W-MON” a uma semana ancorada na segunda-feira. Isso permite que o mesmo significado de calendário determine uma sequência, uma regra de reamostragem ou um deslocamento de data.

Mantenha o horário desejado durante o horário de verão

No pandas 3, pd.offsets.Day(1) significa um dia de calendário e mantém o horário do relógio local. pd.Timedelta(days=1) adiciona exatamente 24 horas. A partir do meio-dia de 29 de março de 2025 em Amsterdã, o deslocamento de calendário termina ao meio-dia de 30 de março, após apenas 23 horas decorridas. O Timedelta termina às 13:00. Um compromisso local recorrente e um tempo de funcionamento medido de um equipamento precisam, portanto, de operações diferentes.

Principais conclusões

  • Meses e anos são regras de calendário, não durações fixas.
  • Um deslocamento de mês ajusta para o último dia válido do mês de destino.
  • MonthEnd(1) avança uma data que já é fim de mês; MonthEnd(0) a mantém.
  • Deslocamentos de dias úteis pulam fins de semana.
  • Um dia de calendário e 24 horas decorridas podem ser diferentes.

3.3 Trabalhar com meses, trimestres e anos fiscais completos como períodos

Um total mensal de vendas pertence a um mês inteiro. É possível rotulá-lo com uma marca temporal, mas um Period declara seu intervalo diretamente. Um período combina um valor com uma frequência, então “2025-03” com frequência “M” significa todo o mês de março de 2025.

Represente e desloque intervalos
march = pd.Period("2025-03", freq="M")
months = pd.period_range("2025-01", "2025-04", freq="M")

months é um PeriodIndex de quatro itens com tipo de dados period[M]. O start_time de março é 1º de março à meia-noite; seu end_time é 31 de março às 23:59:59,999999 na resolução de microssegundos. Um fim é o último momento, não a meia-noite no início do último dia.

A aritmética de períodos se desloca na própria unidade do período. march + 1 é abril de 2025. Junho menos março na frequência mensal fornece um deslocamento de três fins de mês, cujo .n é 3. Um período mensal também conhece .days_in_month: fevereiro de 2025 tem 28 dias.

Converta momentos em intervalos e vice-versa
monthly_labels = df.index.to_period("M")
column_labels = df["date"].dt.to_period("M")
start_labels = monthly_labels.to_timestamp()
end_labels = monthly_labels.to_timestamp(how="end")

Toda marca temporal em março é associada ao mesmo período mensal. Converter esse período de volta fornece seu início por padrão ou seu fim quando solicitado. Isso não recupera o dia e o horário originais de uma observação: a conversão para período descartou esse detalhe.

Mantenha separadas as famílias de códigos. Um intervalo mensal usa “M” em Period e period_range. Uma marca temporal de fim de mês usa “ME” em date_range e na reamostragem de datas e horas. Os dois nomes descrevem tipos diferentes de rótulos.

Altere a frequência de um período

O método .asfreq() de um período seleciona um período que o contém ou está contido nele em outra frequência. march.asfreq("D", how="start") fornece 1º de março como período diário; how="end" fornece 31 de março. Um período anual convertido para “M” com how="start" fornece janeiro.

Isso seleciona um período de limite; não distribui um total mensal entre os dias. Para uma série com PeriodIndex, a reamostragem pode agregar intervalos mensais em intervalos trimestrais. As contagens dos dias de cada mês de 2025 somam totais trimestrais de 90, 91, 92 e 92.

Interprete rótulos de trimestres fiscais

Um trimestre fiscal é nomeado dentro de um ano fiscal cujo mês de término é explícito. Com “Q-JUN”, o ano fiscal de 2025 termina em junho de 2025. Seu primeiro trimestre, portanto, vai de julho a setembro de 2024:

q = pd.Period("2025Q1", freq="Q-JUN")

Com “Q-MAR”, 10 de maio de 2025 está em 2026Q1 porque esse ano fiscal termina em março de 2026. O ano em um rótulo fiscal não precisa corresponder ao ano do calendário de seu primeiro dia. Para filtros de marcas temporais, selecionar horários anteriores ao início do próximo período costuma ser mais claro do que construir a última fração de segundo do período atual.

Principais conclusões

  • Períodos descrevem intervalos e se deslocam na unidade de sua própria frequência.
  • Converter para um período descarta detalhes mais precisos da marca temporal.
  • Códigos de frequência de períodos e de marcas temporais diferem.
  • Anos fiscais são rotulados pelo ano em que terminam.
4

Alterar a frequência de uma série temporal por reamostragem

Alterar a frequência muda a pergunta feita às observações. Leituras detalhadas podem se tornar totais diários ou médias mensais; uma série esparsa pode se tornar uma grade mais fina com posições vazias. Escolha agregações e métodos de preenchimento conforme o significado dos valores e depois verifique os limites dos intervalos de agrupamento temporal. Quando uma tabela contém várias lojas ou sensores, mantenha suas identidades no agrupamento para que os históricos resultantes permaneçam separados.

4.1 Reduzir a frequência temporal para obter totais, médias e outros resumos

A reamostragem temporal responde a perguntas como “Quanta energia foi usada a cada dia?” ou “Qual foi a temperatura média em cada mês?”. Ela agrupa observações em intervalos de tempo e depois aplica uma agregação.

Escolha uma estatística adequada à quantidade
daily = df.resample("D").agg({"kwh": "sum", "temp_c": "mean"})

Energia em kWh e chuva em mm se somam ao longo do tempo. Temperatura é um nível, então uma média a descreve de forma mais útil que uma soma. last() é adequado para um saldo de fechamento, enquanto max() encontra um máximo. Vendas diárias podem ser somadas para obter o total mensal ou ter sua média calculada para obter a venda média por dia observado; a pergunta decide.

resample() retorna um Resampler até que você chame uma agregação como sum(), mean(), count() ou agg(). Use on="date" quando as datas e horas estiverem em uma coluna em vez do índice.

Interprete intervalos do calendário e cobertura parcial

Uma série diária de valores iguais a um de 1º de janeiro a 30 de abril de 2025 fornece totais mensais de 31, 28, 31 e 30 com resample("ME").sum(). “MS” fornece os mesmos totais mensais com rótulos de início. A reamostragem por fim de trimestre fornece 90 para janeiro a março e 30 para um segundo trimestre que contém apenas abril. Um rótulo de 30 de junho não comprova que maio e junho foram observados.

Os intervalos semanais “W” terminam no domingo. Valores diários de 1 a 14 a partir de segunda-feira, 3 de março, somam 28 para a semana rotulada com 9 de março e 77 para a semana rotulada com 16 de março. “W-MON” termina na segunda-feira; o primeiro intervalo contém então apenas 3 de março. Verifique o dia da semana da âncora antes de tratar um rótulo como o início de uma semana.

Separe pertencimento de rotulagem

closed controla qual limite pertence a um intervalo. label controla a marca temporal exibida no resultado. Para a maioria das regras, incluindo “5min”, “h”, “D” e “MS”, ambos são “left” por padrão.

Valores de 0 a 9, um por minuto a partir de 00:00, produzem duas somas padrão de cinco minutos: 10 rotulado como 00:00 e 35 rotulado como 00:05. O primeiro intervalo contém de 00:00 a 00:04. Com closed="right", label="right", os resultados são 0 em 00:00, 15 em 00:05 e 30 em 00:10. O intervalo do meio contém de 00:01 a 00:05. Alterar apenas o rótulo não alteraria o pertencimento.

Regras de fim como “ME”, “QE”, “YE”, “W” e “BME” usam fechamento e rótulos à direita por padrão. Intervalos fixos normalmente se alinham a partir da meia-noite do primeiro dia, então limites de 15 minutos são 00:00, 00:15 e assim por diante.

Distinga intervalos vazios de zeros reais

O sum() de um dia vazio é 0, count() é 0 e mean() é NaN. Use sum(min_count=1) para preservar a ausência quando não houver leitura disponível. Assim, um zero registrado e uma leitura ausente continuam distinguíveis.

Para vários resumos de uma série, .ohlc() fornece abertura, máxima, mínima e fechamento: o primeiro, o maior, o menor e o último valor observado em cada intervalo. Leituras 10, 12 e 11 fornecem abertura 10, máxima 12, mínima 10 e fechamento 11. A abertura e o fechamento dependem da ordem temporal, não do tamanho numérico.

Principais conclusões

  • Escolha agregações conforme o significado dos valores.
  • closed define o pertencimento; label define o horário exibido.
  • Rótulos semanais normalmente nomeiam o dia de término da semana.
  • Verifique o primeiro e o último intervalo quando forem parciais.
  • sum(min_count=1) preserva intervalos vazios como ausentes.
  • OHLC significa primeiro, máximo, mínimo e último.

4.2 Aumentar a frequência temporal e preencher lacunas em uma série temporal

Uma grade mais fina cria posições, não medições. Antes de preenchê-las, decida se cada valor representa um estado, uma contagem, uma medição que varia suavemente ou um total em um intervalo.

Revele as novas posições
s = pd.Series([10.0, 16.0],
              index=pd.to_datetime(["2025-06-01", "2025-06-04"]))
daily = s.asfreq("D")

O resultado diário é 10, NaN, NaN, 16. Aqui, s.resample("D").asfreq() fornece a mesma grade. Os valores são mantidos nas marcas temporais correspondentes; as novas datas não contêm observações originais.

Preencha conforme o significado
MétodoResultado de 1º a 4 de junhoSignificado adequado
ffill()10, 10, 10, 16Um estado permanece até ser alterado
bfill()10, 16, 16, 16Um valor posterior é usado para posições anteriores
interpolate()10, 12, 14, 16A variação é estimada ao longo de uma linha reta

Uma configuração de termostato permanece até alguém alterá-la, então o preenchimento com o último valor válido é útil. Um nível de água que varia suavemente pode justificar a interpolação. Zero é adequado a uma contagem de eventos somente quando o registro ausente significa que não houve evento. Uma falha do sensor não comprova uma medição igual a zero.

O exemplo de interpolação usa uma grade diária regular. A variação total é 6 em três passos de um dia, então cada passo adiciona 2. Os dois valores intermediários são estimativas, não medições recuperadas.

O preenchimento com o próximo valor válido usa informações futuras. Ele não pode descrever o que um observador sabia em cada momento anterior. O preenchimento com o último valor válido respeita essa direção temporal, mas lacunas longas ainda podem tornar desatualizado um estado propagado. daily.ffill(limit=1) preenche uma posição após uma leitura, fornecendo 10, 10, NaN, 16 neste exemplo.

Use limites explícitos para o relatório

asfreq("D") abrange da primeira à última marca temporal de origem. Reindexe quando o calendário precisar ir além:

calendar = pd.date_range("2025-06-01", "2025-06-05", freq="D")
complete = s.reindex(calendar)

Agora 5 de junho também está visível. fill_value=0 na reindexação preenche rótulos recém-criados, o que é útil para dias confirmados sem eventos. Ele não substitui valores ausentes que já existiam na origem. Tanto a reindexação quanto asfreq() precisam de rótulos de origem únicos.

Separe amostragem de agregação

asfreq() seleciona valores nas marcas temporais de destino. Ele não resume as observações entre elas. Em 48 valores horários numerados de 0 a 47, asfreq("D") seleciona as leituras da meia-noite 0 e 24. resample("D").sum() fornece 276 e 852 ao somar todos os valores horários de cada dia.

Um total mensal não pode ser propagado para todos os dias e depois somado: isso contaria o mesmo total repetidamente. Uma alocação diária igual exige dividir pelo número de dias do mês. Essa é uma hipótese de alocação, diferente de propagar um estado ou estimar uma medição que varia suavemente.

Principais conclusões

  • Uma grade mais fina adiciona posições vazias, não observações.
  • Escolha o preenchimento conforme o significado da quantidade e a direção do tempo.
  • Limite o preenchimento quando lacunas longas devem permanecer visíveis.
  • asfreq() seleciona pontos; a reamostragem com agregação resume intervalos.

4.3 Reamostrar várias séries de uma vez usando grupos

Uma tabela no formato longo pode conter muitas séries em uma única coluna de valores. Uma chave de loja distingue lojas, e uma chave de sensor distingue sensores. Agrupe por essa identidade e pelo tempo quando a pergunta exigir um histórico separado para cada série.

Combine uma chave de série com uma regra temporal
monthly = df.groupby([
    "store", pd.Grouper(key="date", freq="ME")
])["sales"].sum()

pd.Grouper coloca uma regra de intervalos de agrupamento temporal dentro de groupby. key= nomeia uma coluna de datas e horas; level= pode nomear um nível de índice de datas e horas. O resultado tem um nível de índice para loja e outro para fim de mês. Selecionar a coluna numérica mantém a agregação focada nas vendas.

Suponha que a loja A venda 100 em 5 de janeiro, 150 em 20 de janeiro e 120 em 3 de fevereiro. A loja B vende 80 em 11 de janeiro, 90 em 14 de fevereiro e 60 em 25 de fevereiro. O resultado agrupado é A: janeiro 250, fevereiro 120; B: janeiro 80, fevereiro 150. Reamostrar a tabela inteira sem a chave de loja combinaria as lojas em janeiro 330 e fevereiro 270.

Reamostre dentro de cada grupo

Uma segunda forma transforma primeiro a data no índice:

monthly = (df.set_index("date")
             .groupby("store")["sales"]
             .resample("ME").sum())

Ela produz os mesmos totais para combinações observadas de loja e mês. As duas formas diferem quando uma loja não tem linhas em um mês intermediário. Se A aparecer apenas em janeiro e março, a reamostragem por grupo cria um intervalo de fevereiro entre a primeira e a última data de A; sum() comum fornece zero ali. Agrupar por loja e por um Grouper mantém as combinações que contêm linhas, então a combinação de fevereiro de A fica ausente.

Uma combinação ausente, um intervalo vazio resumido como zero e uma medição ausente são estados de dados diferentes. Decida qual deles o relatório deve mostrar. Use reindexação explícita quando todas as lojas precisarem compartilhar um calendário mais amplo que seu intervalo observado. Use min_count=1 com uma soma quando um intervalo vazio deve permanecer ausente.

Remodele para comparação

monthly.unstack("store") move o nível de loja para colunas e deixa os meses nas linhas. No exemplo, janeiro tem A = 250 e B = 80; fevereiro tem A = 120 e B = 150. Uma combinação ausente de loja e mês se torna NaN; unstack("store", fill_value=0) substitui combinações ausentes por zero quando esse significado é adequado.

Mantenha anos separados quando necessário

Um Grouper temporal com “ME” mantém janeiro de 2024 e janeiro de 2025 separados. Agrupar por df["date"].dt.month mantém apenas os números dos meses e reúne os dois janeiros. A primeira forma responde “O que aconteceu a cada mês?”. A segunda permite uma comparação sazonal, como a média de vendas de janeiro ao longo dos anos. A escolha depende da identidade temporal que você precisa preservar.

Principais conclusões

  • Agrupe pela identidade da série e pelo tempo para preservar históricos separados.
  • A reamostragem por grupo e um Grouper temporal diferem para meses vazios.
  • unstack() facilita a comparação de séries em colunas.
  • Números de mês combinam anos; intervalos temporais mensais os preservam.
5

Suavizar e resumir dados com janelas móveis e expansivas

Estatísticas de janela descrevem como uma série muda sem reduzi-la a um único número geral. Um cálculo móvel acompanha linhas recentes ou tempo decorrido recente, um cálculo expansivo mantém o histórico e uma média exponencialmente ponderada favorece gradualmente observações mais novas. Examine quais valores entram em cada resultado, como dados ausentes o afetam e onde o resultado é rotulado. Essas escolhas determinam o que um valor suavizado pode informar.

5.1 Calcular estatísticas móveis sobre um número fixo de linhas

Uma janela móvel resume repetidamente um grupo móvel de linhas. A cada nova linha, a janela ganha o valor atual e, em algum momento, descarta o mais antigo. O comprimento da janela controla quanto da variação de curto prazo é suavizado.

Examine uma janela por vez

Para os valores 4, 8, 6, 10 e 12:

s = pd.Series([4, 8, 6, 10, 12])
s.rolling(3).mean()

A primeira janela completa é [4, 8, 6], com total 18 e média 6. A próxima é [8, 6, 10], com média 8. A última é [6, 10, 12], com média de aproximadamente 9,333. Os resultados padrão são NaN, NaN, 6, 8 e 9,333 porque as duas primeiras linhas ainda não têm três observações.

Controle os requisitos de dados e o posicionamento

min_periods define a contagem necessária de valores não ausentes. Para uma janela por contagem de linhas, o padrão é o tamanho completo da janela. Com min_periods=1, as primeiras médias usam um valor e depois dois: 4 e 6. Suas amostras menores as tornam menos estáveis que as médias posteriores de três valores.

Valores ausentes ainda ocupam posições de linha. Em [4, NaN, 6, 10, 12], uma janela de três linhas que contém o valor ausente tem apenas duas observações válidas. min_periods=2 permite a média de [4, NaN, 6], que é 5; o padrão não permite.

Os resultados normalmente pertencem à última linha da janela. Com center=True, as mesmas três médias de janelas completas aparecem nas linhas do meio, fornecendo NaN, 6, 8, 9,333, NaN. Um valor centralizado usa observações posteriores em relação ao seu rótulo. Use janelas com término na observação atual para descrever o que era conhecido em cada momento.

Resuma mais do que a média

As mesmas janelas permitem sum(), max(), min() e std(). O pandas usa o desvio padrão amostral por padrão: [4, 8, 6] tem desvio padrão 2. Uma função personalizada pode calcular uma amplitude:

s.rolling(3).apply(lambda v: v.max() - v.min(), raw=True)

As amplitudes das janelas completas são 4, 4 e 6. raw=True passa valores de array para a função. Duas séries alinhadas também podem compartilhar uma janela: a.rolling(3).corr(b) mede a correlação entre as últimas três observações pareadas, de modo que a relação pode variar ao longo do tempo.

Escolha um comprimento e um agrupamento significativos

Com uma linha diária completa por dia, uma média de sete linhas contém cada dia da semana uma vez e elimina pela média um componente semanal fixo e repetitivo. Uma média de doze linhas faz o mesmo para um componente anual fixo em dados mensais completos. Janelas mais longas suavizam mais, mas respondem mais tarde a mudanças de direção; uma média de n linhas com término na observação atual tem aproximadamente meia janela de atraso, cerca de (n − 1) / 2 linhas.

Linhas não são dias. Sete leituras com lacunas podem cobrir mais de uma semana. Use uma janela de tempo quando a pergunta indicar tempo decorrido. Em uma tabela no formato longo, ordene cada série no tempo e execute janelas dentro de seu grupo: df.groupby("store")["sales"].rolling(2).sum(). Isso impede que uma janela passe dos dados de uma loja para os de outra.

Principais conclusões

  • Uma janela de linhas conta linhas, inclusive posições com valores ausentes.
  • min_periods conta observações válidas.
  • Janelas centralizadas incluem valores posteriores em relação a seus rótulos.
  • Janelas mais longas suavizam mais e respondem mais lentamente.
  • Aplique janelas separadamente dentro de cada série.
  • Métodos móveis podem resumir dispersão e relações, além de níveis.

5.2 Usar janelas baseadas no tempo para dados irregulares

Eventos irregulares pedem janelas definidas pelo tempo. “Pedidos nos últimos três dias” deve manter a mesma duração mesmo quando há muitos pedidos em um dia e nenhum no dia seguinte.

Defina uma janela de tempo decorrido
s = pd.Series([5, 3, 4, 6], index=pd.to_datetime([
    "2025-05-01", "2025-05-02", "2025-05-05", "2025-05-06"
]))
s.rolling("3D").sum()

Os resultados são 5, 8, 4 e 10. Ao contrário de rolling(3), a string “3D” define um intervalo de três dias. O número de linhas dentro desse intervalo pode variar. Ordene o DatetimeIndex primeiro; janelas de tempo exigem horários em ordem monotônica. Um DataFrame pode usar uma coluna ordenada de datas e horas com on="date".

Verifique o limite antes de somar

Por padrão, a janela inclui o horário atual e exclui o instante exatamente três dias antes. À meia-noite de 5 de maio, o intervalo vai de depois da meia-noite de 2 de maio até a meia-noite de 5 de maio. A leitura de 2 de maio está exatamente no limite excluído, então apenas o valor 4 de 5 de maio contribui.

Em 6 de maio, a janela começa logo após 3 de maio e inclui os valores 4 e 6, totalizando 10. Com closed="both", a janela de 5 de maio também inclui 2 de maio e totaliza 7. A escolha de um limite pode alterar um resultado mesmo quando os dados e a duração permanecem os mesmos.

Uma janela de duas linhas nessa série fornece NaN, 8, 7 e 10. Em 5 de maio, ela inclui a linha anterior de 2 de maio. Isso responde a “as últimas duas leituras”, uma pergunta diferente de “os últimos três dias”.

Defina uma exigência de dados

O min_periods de uma janela de tempo é 1 por padrão. A primeira observação pode, portanto, produzir um resultado imediatamente. s.rolling("3D").count() fornece 1, 2, 1 e 2 leituras, revelando a variação na quantidade de dados que sustenta o resultado. Uma média baseada em uma leitura e uma média baseada em muitas são cálculos válidos, mas têm sustentações diferentes nos dados.

Com min_periods=2, as somas são NaN, 8, NaN, 10. A duração não mudou; o cálculo agora exige pelo menos duas observações não ausentes dentro dessa duração. Um intervalo de tempo mais amplo não garante, por si só, mais observações.

Use durações fixas e separe séries

Janelas móveis baseadas no tempo exigem uma duração fixa como “30min”, “24h” ou “7D”. Uma regra de fim de mês como “1ME” tem duração variável e não pode definir esse tipo de janela móvel. Use uma duração fixa declarada como “30D” se essa for a regra desejada, ou primeiro agregue em intervalos mensais quando a pergunta tratar de meses do calendário.

Para históricos separados de clientes, df.groupby("customer").rolling("30D", on="date")["amount"].sum() mantém juntas as transações de cada cliente. Os horários devem estar ordenados dentro de cada cliente. O resultado adiciona a chave do grupo como nível do índice, preservando qual série cada janela descreve.

Principais conclusões

  • Janelas de tempo selecionam por duração e podem conter números diferentes de linhas.
  • Por padrão, o limite esquerdo é excluído e o horário atual é incluído.
  • O min_periods de uma janela de tempo é 1 por padrão.
  • Meses do calendário não podem servir como durações fixas de janelas móveis.

5.3 Acompanhar totais acumulados, máximos acumulados e médias exponencialmente ponderadas

Algumas perguntas precisam de todo o histórico: “Quanto foi acumulado?” ou “Qual é o maior valor até agora?”. Outras devem favorecer observações recentes sem descartar abruptamente o passado. Cálculos expansivos e exponencialmente ponderados atendem a esses objetivos diferentes.

Aumente o histórico uma linha por vez

Para os valores 4, 8, 6, 10 e 12, s.expanding().mean() fornece 4, 6, 6, 7 e 8. O quarto resultado usa os quatro valores: seu total é 28 e sua média é 7. expanding().sum() fornece 4, 12, 18, 28 e 40, igual a cumsum() nessa série completa. expanding().max() fornece 4, 8, 8, 10 e 12, igual a cummax().

Janelas expansivas exigem uma observação por padrão. Elas mantêm todas as observações anteriores com peso igual. Perto do fim de uma série longa, um novo valor contribui com apenas uma pequena parte de todo esse histórico, então uma média acumulada reage lentamente.

Totais acumulados podem recomeçar em um limite:

ytd = df.groupby(df.index.year)["sales"].cumsum()
by_store = df.groupby("store")["sales"].cumsum()

Ordene dentro do histórico relevante antes de acumular. Uma soma acumulada simples sobre lojas intercaladas as mistura.

Meça a distância abaixo de um máximo acumulado

Para 100, 120, 90, 110 e 130, cummax() fornece 100, 120, 120, 120 e 130. Calcule a queda em relação ao máximo acumulado com s / s.cummax() - 1. Em 90, a referência é o máximo anterior de 120, então a queda é −0,25, ou 25% abaixo do máximo. Comparar 90 com o primeiro valor de 100 responderia a uma pergunta diferente. Um novo máximo tem queda zero.

Dê mais peso aos valores recentes

Uma média móvel exponencialmente ponderada, ou EWMA, reduz o peso dos valores mais antigos por um fator constante. O fator de suavização segue α=2/(span+1), então span=3 fornece 0,5. Para adjust=False, a atualização é:

yt=αxt+(1−α)yt−1

Aqui, xt é a nova observação, yt−1 é o valor suavizado anterior e yt é o resultado atualizado. O primeiro valor suavizado é igual à primeira observação. Depois, cada novo valor recebe peso 0,5 e o valor suavizado anterior recebe peso 0,5:

s.ewm(span=3, adjust=False).mean()

Para 4, 8, 6, 10 e 12, os resultados são 4, 6, 6, 8 e 10. A atualização final calcula a média da nova observação 12 e do valor suavizado anterior 8. Ela não calcula a média apenas das duas observações brutas mais recentes.

Interprete a configuração de ajuste

O padrão adjust=True normaliza pela soma dos pesos disponíveis. Para os mesmos dados, os primeiros resultados são 4, aproximadamente 6,667, 6,286, 8,267 e 10,194. Esse cálculo inicial é diferente da forma recursiva; a diferença diminui conforme mais histórico fica disponível.

Escolha um argumento de decaimento: span, alpha, com ou halflife. Uma EWMA não tem um ponto de corte abrupto em que uma linha antiga desaparece de repente. Uma média móvel tem esse ponto de corte, enquanto uma média expansiva mantém todos os valores anteriores com peso igual. Escolha conforme a influência que mudanças recentes devem ter.

Principais conclusões

  • Janelas expansivas usam todo o histórico até cada linha.
  • Agrupe cálculos acumulados quando os históricos precisarem recomeçar.
  • A queda em relação ao máximo acumulado compara um valor com seu máximo acumulado.
  • Os pesos da EWMA diminuem gradualmente com o tempo.
  • adjust=False usa o valor suavizado anterior em sua atualização recursiva.
  • O ajuste padrão altera as primeiras médias ponderadas.
6

Tratar fusos horários e horário de verão

Uma leitura de relógio local identifica um momento somente quando seu fuso horário é conhecido. Atribua o fuso do registro, converta momentos reais entre fusos e mantenha os cálculos alinhados em UTC. Relatórios locais precisam então dos limites corretos do calendário, inclusive das horas que mudanças de horário de verão pulam ou repetem. Separar a atribuição de fuso da conversão permite combinar registros de vários locais sem alterar silenciosamente seu significado.

6.1 Atribuir fusos horários a marcas temporais e converter entre fusos

Uma leitura de relógio precisa de uma localização para identificar um momento. “2025-07-01 09:00” é uma marca temporal sem fuso horário. Adicionar “Europe/Amsterdam” faz com que ela tenha fuso horário: em julho, seu deslocamento é +02:00 e ela representa 07:00 UTC. UTC é a referência de tempo compartilhada e não tem mudanças de relógio por horário de verão.

Atribua o fuso do registro
local = pd.Timestamp("2025-07-01 09:00")
aware = local.tz_localize("Europe/Amsterdam")

tz_localize() mantém 09:00 e atribui a esse horário o significado do fuso. Use o local onde a leitura do relógio foi registrada. Chamar a mesma leitura de UTC descreveria um momento diferente, duas horas depois neste exemplo.

Use nomes da IANA como “Europe/Amsterdam”, “America/New_York” e “Asia/Kolkata”. Fusos regionais nomeados mantêm regras históricas de deslocamento e horário de verão. Um deslocamento fixo de +01:00 não mantém. Nomes curtos são inconsistentes: “EST” é fixo em −05:00, enquanto “CET” segue mudanças sazonais. O pandas 3 usa a representação zoneinfo do Python.

Converta um momento já identificado

aware.tz_convert("UTC") fornece 07:00 UTC. Converter esse mesmo instante para Nova York fornece 03:00, para Calcutá 12:30, para Tóquio 16:00 e para Sydney 17:00 em 1º de julho. O horário do relógio muda, mas o momento continua o mesmo.

OperaçãoEntrada necessáriaO que permanece fixo
tz_localize(zone)Horário sem fusoLeitura do relógio local
tz_convert(zone)Horário com fusoMomento real

Converter um valor sem fuso gera um erro porque não se conhece o fuso inicial. Atribuir um fuso a um valor que já tem fuso também gera um erro; use conversão nessa operação. Em colunas, use .dt.tz_localize() e .dt.tz_convert(). Em índices, use os métodos diretamente ou os métodos do DataFrame voltados ao índice.

Leia texto com deslocamento e combine fusos

Um “Z” no final de um texto ISO significa UTC. Para texto com deslocamentos diferentes, interprete com utc=True:

raw = pd.Series(["2025-03-01 10:00+01:00",
                 "2025-04-01 10:00+02:00"])
common = pd.to_datetime(raw, utc=True)

Esses valores se tornam 09:00 e 08:00 UTC. Depois, converta para um fuso regional para relatórios locais. A interpretação de deslocamentos mistos sem utc=True gera um erro no pandas 3.

Duas séries com fuso se alinham pelos momentos reais mesmo quando seus rótulos de fuso diferem. Leituras de Amsterdã às 09:00 e 10:00 e de Londres às 08:00 e 09:00 em julho se referem a instantes correspondentes. O resultado de sua aritmética usa rótulos UTC. Comparações de ordem entre marcas temporais sem e com fuso falham; a igualdade retorna falso.

Remova um fuso de forma deliberada

tz_convert(None) primeiro expressa um valor com fuso em UTC e depois remove o fuso. As 09:00 de Amsterdã se tornam 07:00 sem fuso em julho. tz_localize(None) remove o fuso e mantém 09:00 sem fuso. Essas saídas são diferentes. Mantenha os dados de cálculo com fuso em UTC e depois converta antes de apresentar resultados ou agrupar por dia local.

Principais conclusões

  • Atribua às leituras de relógio sem fuso o fuso em que foram registradas.
  • Converta marcas temporais com fuso para exibir o mesmo momento em outro local.
  • Nomes regionais da IANA mantêm regras de horário de verão.
  • Interprete deslocamentos mistos em uma representação comum em UTC.
  • Remover um fuso pode preservar a hora UTC ou o horário do relógio local.

6.2 Tratar o horário de verão em séries temporais

Relógios locais podem pular ou repetir uma hora. Essas mudanças afetam a interpretação, as durações decorridas e os totais diários. Fusos horários nomeados permitem que o pandas distinga os momentos reais por trás das leituras de relógio local.

Reconheça um horário local pulado

Amsterdã avançou de 02:00 para 03:00 em 30 de março de 2025. A leitura de relógio 02:30 nunca ocorreu. Atribuir-lhe um fuso sem uma política gera um erro:

pd.Timestamp("2025-03-30 02:30").tz_localize(
    "Europe/Amsterdam", nonexistent="shift_forward"
)

O resultado é 03:00+02:00, o primeiro horário válido após a lacuna. nonexistent="NaT" preserva o problema como ausente. "shift_backward" desloca para o último momento válido antes da lacuna. Deslocar um registro altera sua marca temporal, então mantenha a entrada original e documente a política escolhida na análise.

Distinga duas leituras repetidas

Em 26 de outubro de 2025, Amsterdã voltou de 03:00 para 02:00. A leitura local 02:30 ocorreu uma vez com deslocamento +02:00 e uma vez com +01:00. Elas estão separadas por uma hora em UTC.

ambiguous=True seleciona a ocorrência no horário de verão; ambiguous=False seleciona o horário padrão. ambiguous="NaT" marca uma leitura não resolvida como ausente. Uma lista booleana pode escolher por linha. ambiguous="infer" pode usar uma sequência ordenada que contenha a hora repetida, como 01:30, 02:00, 02:30, 02:00, 02:30, 03:00. Uma leitura isolada de relógio em horário repetido não fornece evidência de ordenação suficiente para inferir qual ocorrência era pretendida.

Conte as horas do dia local

O dia da mudança na primavera tem 23 horas e o dia da mudança no outono tem 25. Uma série horária completa reamostrada por dias locais tem, portanto, contagens variáveis. Para informar a energia horária média, divida uma soma diária pelo número real de leituras horárias válidas ou calcule sua média. Dividir todo total por 24 representa incorretamente os dias de mudança.

Um conjunto de dados parcial também pode criar intervalos curtos. Uma série em UTC que começa em 29 de março às 00:00 começa em Amsterdã às 01:00, então falta a meia-noite em seu primeiro dia local, mesmo antes do dia da mudança. Verifique os limites do relatório e as regras do fuso.

Distinga mesmo horário de tempo decorrido igual
t = pd.Timestamp("2025-03-29 12:00", tz="Europe/Amsterdam")
t + pd.offsets.Day(1)       # March 30 at 12:00
t + pd.Timedelta(days=1)    # March 30 at 13:00

O deslocamento de calendário preserva o meio-dia e atravessa apenas 23 horas decorridas. O Timedelta adiciona 24 horas. No outono, um dia de calendário local pode conter 25 horas decorridas.

Escolha o fuso do relatório antes de agrupar

A reamostragem segue o fuso do índice. Para totalizar o consumo pela data local de Amsterdã, primeiro converta um índice UTC com fuso para “Europe/Amsterdam” e depois reamostre para “D”. Reamostrar primeiro em UTC cria limites de dia diferentes que não podem ser corrigidos apenas pela alteração dos rótulos do resultado.

As datas de mudança variam por região: Nova York mudou em 9 de março e 2 de novembro em 2025; Sydney terminou o horário de verão em 6 de abril e o iniciou em 5 de outubro. Tóquio e Calcutá não têm mudanças de horário de verão. Mantenha momentos brutos em UTC e use o fuso local nomeado para relatórios de calendário.

Principais conclusões

  • Horas puladas e repetidas precisam de políticas explícitas de atribuição de fuso.
  • Um horário local ambíguo pode se referir a dois momentos UTC distintos.
  • Dias locais completos podem conter 23 ou 25 horas.
  • Converta para o fuso do relatório antes de agrupar por dia local.
  • Distinga mudanças de relógio de cobertura incompleta dos dados.

Exercícios resolvidos de Séries temporais com pandas

6 Lições Interativas

1

Transformar um registro em texto em datas utilizáveis

11 passos
Interprete um pequeno registro, inspecione falhas e calcule durações sem perder as unidades de tempo.
  1. 1
    IntroduçãoComece com uma coluna de datas

    Um registro de medidor chega com datas escritas como texto. Você precisa de datas que o pandas possa comparar, do tempo decorrido entre registros e de rótulos legíveis para um relatório. Isso significa um Timestamp para cada momento, um Timedelta para o tempo decorrido e texto formatado só no final.

    Examine a conversão antes de calcular. Uma string pode parecer uma data sem ainda ter comportamento de calendário, e um formato ambíguo pode produzir uma data plausível com significado errado.

  2. 2
    ExemploInterprete a convenção de origem

    A documentação do registro informa datas com o dia primeiro e relógio de 24 horas. Uma entrada é “14/03/2025 18:45”. Seu formato é:

    format="%d/%m/%Y %H:%M"
    

    Leia os códigos em ordem: dia, mês, ano, hora e minuto. %m e %M diferem entre maiúscula e minúscula porque representam campos diferentes. A data é 14 de março; o horário é 18:45.

  3. 3
    ExplicaçãoAplique um formato conhecido

    Converta a coluna com o formato documentado:

    parsed = pd.to_datetime(raw,
        format="%d/%m/%Y %H:%M", errors="coerce")
    

    O formato se aplica a cada entrada não ausente. A coerção transforma entradas inválidas em NaT. Sem um formato conhecido, o pandas infere a partir da primeira linha não ausente; isso torna uma origem com datas ambíguas separadas por barras vulnerável à interpretação errada.

  4. 4
    DesafioConte as falhas reais

    Uma coluna contém “14/03/2025 18:45”, “bad” e None. Após a coerção, dois resultados são NaT. Quantos valores presentes falharam na interpretação e qual máscara os encontra?

    ---reveal---

    Um valor presente falhou: “bad”. Use parsed.isna() & raw.notna(). O None original já estava ausente, então contar todos os NaT superestimaria as falhas de conversão.

  5. 5
    ExplicaçãoIdentifique momentos e durações

    Um Timestamp representa um momento, e uma coluna de datas e horas contém vários momentos. Um Timedelta representa tempo decorrido.

    Subtraia um Timestamp inicial de um Timestamp final para obter uma duração. Adicione um Timedelta para deslocar um momento por uma quantidade fixa. NaT marca datas e horas ausentes, então operações aritméticas que envolvem um início ou fim ausente também produzem uma duração ausente.

  6. 6
    ExemploSubtraia os dois momentos

    Considere estas marcas temporais:

    start = pd.Timestamp("2025-03-10 18:00")
    end = pd.Timestamp("2025-03-14 09:30")
    elapsed = end - start
    

    O resultado é 3 dias e 15:30. Primeiro conte os três dias inteiros e depois as 15 horas e 30 minutos restantes. Manter isso como Timedelta permite que a próxima etapa escolha a unidade desejada para o relatório sem descartar o restante.

  7. 7
    ExemploConverta a duração completa em horas

    Três dias contribuem com 72 horas. O restante contribui com 15,5 horas, então o total é 87,5 horas.

    hours = elapsed / pd.Timedelta(hours=1)
    

    elapsed.days fornece apenas 3. Ele descreve o componente de dias inteiros, então multiplicar esse componente por 24 perderia 15,5 horas. total_seconds() fornece 315.000 e também inclui a duração completa.

  8. 8
    DesafioEscolha um componente útil do calendário

    Um relatório precisa da média de kWh por dia da semana ao longo de muitas semanas. Qual componente do calendário pode fornecer a chave de agrupamento, e uma coluna precisa de .dt?

    ---reveal---

    Use df["timestamp"].dt.day_name() como chave de agrupamento e depois calcule a média de kwh. Uma coluna de datas e horas precisa de .dt; um DatetimeIndex disponibiliza day_name() diretamente. Isso agrupa dias recorrentes da semana, não datas separadas do calendário.

  9. 9
    DicaVerifique unidades antes da exportação para inteiros

    Um tipo de data e hora como datetime64[us] armazena contagens em microssegundos. Uma conversão direta para inteiro retorna essas contagens, mesmo que código mais antigo espere nanossegundos.

    Para uma coluna, solicite explicitamente s.dt.as_unit("ns").astype("int64") quando forem necessárias contagens em nanossegundos. Para comparações de duração, mantenha a aritmética de Timedelta para que a unidade acompanhe o valor.

  10. 10
    DesafioPrepare o relatório final

    Você interpretou datas e calculou horas decorridas. O relatório precisa de datas como “14 Mar 2025”. Você deve formatar a coluna de datas antes de calcular e qual expressão produz o rótulo?

    ---reveal---

    Conclua primeiro os cálculos de data e hora e depois use parsed.dt.strftime("%d %b %Y") para rótulos de exibição. A formatação retorna texto. O nome abreviado do mês segue a configuração regional do sistema; este exemplo usa inglês.

  11. 11
    RecapitulaçãoEscolha a representação conforme a finalidade

    Use valores de data e hora para seleção por calendário e aritmética, Timedeltas para durações decorridas e strings formatadas para rótulos finais. A interpretação é o ponto em que convenções de origem se tornam significado de calendário.

    Antes de passar uma coluna convertida adiante, inspecione entradas não ausentes que falharam, seu tipo de dados e quaisquer unidades de saída necessárias. Isso dá à análise posterior uma representação temporal clara com a qual trabalhar.

2

Construir um histórico limpo e comparar as datas corretas

13 passos
Verifique um índice de eventos, selecione intervalos de relatório e distinga deslocamentos de linha de comparações de calendário.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoDê a cada linha uma identidade temporal clara
  2. 2
    ExemploInterprete, indexe e ordene
  3. 3
    DicaTrate eventos repetidos conforme o significado
  4. 4
    DesafioRevele uma data ausente
  5. 5
    ExplicaçãoInterprete a precisão de um seletor
  6. 6
    DesafioSelecione uma janela recorrente de trabalho
  7. 7
    ExemploColoque o antecessor ao lado de cada valor
  8. 8
    Ideia-chaveUma fração de crescimento não é um rótulo percentual
  9. 9
    ExplicaçãoDesloque datas para uma comparação de calendário
  10. 10
    DesafioAcompanhe o alinhamento dos rótulos
  11. 11
    ConexãoMantenha separado o antecessor de cada loja
  12. 12
    DesafioCorrija um relatório de crescimento diário
  13. 13
    RecapitulaçãoVerifique rótulos antes de interpretar variações
3

Construir calendários e rotular intervalos completos

12 passos
Gere sequências, desloque datas de calendário e interprete rótulos de períodos, incluindo trimestres fiscais.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoDecida o que uma data deve representar
  2. 2
    ExemploGere datas de fim de mês
  3. 3
    DicaAssocie o código ao calendário
  4. 4
    DesafioConte os extremos de uma sequência
  5. 5
    ExemploDesloque um mês a partir de 31 de janeiro
  6. 6
    ExplicaçãoEntenda uma data que já corresponde à âncora
  7. 7
    DesafioEscolha tempo útil ou tempo decorrido
  8. 8
    ExplicaçãoDê rótulos de intervalo a totais mensais
  9. 9
    ExemploConverta uma data em mês e de volta
  10. 10
    DesafioInterprete um rótulo fiscal
  11. 11
    DesafioEscolha entre momentos mensais e intervalos mensais
  12. 12
    RecapitulaçãoDeixe a regra de calendário expressar o significado
4

Criar relatórios diários e mensais a partir de observações

13 passos
Escolha agregações, acompanhe limites de intervalos, preencha uma grade mais fina e mantenha séries separadas em grupos.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoPergunte o que a nova frequência deve significar
  2. 2
    ExemploAgregue duas quantidades de formas diferentes
  3. 3
    ExplicaçãoAcompanhe um intervalo de cinco minutos
  4. 4
    DesafioMova a observação do limite
  5. 5
    DicaVerifique intervalos vazios e parciais
  6. 6
    ExemploCrie uma grade diária mais fina
  7. 7
    ExemploPreencha uma lacuna de três maneiras
  8. 8
    DesafioPreserve o que era conhecido
  9. 9
    Ideia-chaveUm ponto amostrado não é um total
  10. 10
    ExemploMantenha as lojas em seus próprios intervalos
  11. 11
    DesafioExplique uma combinação vazia de loja e mês
  12. 12
    DesafioCorrija uma tabela de comparação
  13. 13
    RecapitulaçãoInterprete o que cada linha de saída afirma
5

Acompanhar as observações dentro de cada janela

16 passos
Compare janelas de linhas, janelas de tempo decorrido, histórico acumulado e ponderação exponencial.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoEscolha quanto histórico importa
  2. 2
    ExemploConstrua a primeira janela completa de linhas
  3. 3
    ExemploAvance uma linha
  4. 4
    DesafioConte valores válidos nas posições
  5. 5
    DicaPosicione os resultados no tempo com clareza
  6. 6
    ExplicaçãoUse tempo decorrido para eventos irregulares
  7. 7
    ExemploAcompanhe o limite esquerdo excluído
  8. 8
    DesafioAltere o limite e a contagem de observações exigida
  9. 9
    Ideia-chaveUm mês não é uma duração fixa de janela móvel
  10. 10
    ExemploMantenha todo o histórico
  11. 11
    ExemploCompare um valor com seu máximo anterior
  12. 12
    ExemploAtualize uma média ponderada recursiva
  13. 13
    ExplicaçãoInterprete a configuração de ajuste
  14. 14
    DesafioDistinga a ponderação de um par recente
  15. 15
    DesafioSelecione o histórico considerado por um relatório
  16. 16
    RecapitulaçãoIdentifique a janela antes de interpretar o resultado
6

Associar momentos entre fusos e mudanças de relógio

12 passos
Atribua fusos e converta marcas temporais, resolva horas puladas ou repetidas e forme intervalos corretos por dia local.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoSepare o horário do relógio do momento
  2. 2
    ExplicaçãoAtribua um fuso a uma leitura sem fuso
  3. 3
    ExemploConverta um evento para vários horários
  4. 4
    DicaMantenha as regras regionais
  5. 5
    DesafioEscolha como remover um fuso
  6. 6
    ExplicaçãoTrate uma leitura pulada na primavera
  7. 7
    ExplicaçãoSepare duas ocorrências no outono
  8. 8
    DesafioResolva a leitura de relógio repetida
  9. 9
    ExemploConte um dia local completo
  10. 10
    ExemploDistinga o meio-dia de amanhã de 24 horas
  11. 11
    DesafioCorrija o relatório diário local
  12. 12
    RecapitulaçãoMantenha claros o instante e o limite do relatório

Questões de Séries temporais com pandas

50 Questões de Prática em 5 conjuntos

Conjunto 1: Interpretar, selecionar e resumir datas10 Questões de Prática

Questão 1 de 10

Uma tarefa começa em “2025-08-12 22:15” e termina em “2025-08-14 04:45”. Quantas horas decorridas a subtração de marcas temporais fornece?
  1. 24,0 horas
  2. 6,5 horas
  3. 30,5 horas
  4. 54,5 horas
Mostrar respostaOcultar resposta
Resposta: C
A duração é um dia inteiro mais 6 horas e 30 minutos, totalizando 30,5 horas. Ler apenas o componente .days do Timedelta manteria 24 horas e perderia as 6,5 horas restantes. Divida a duração por pd.Timedelta(hours=1) para incluir toda a duração.

Questão 2 de 10

Uma origem define “07/11/2025 16:20” como 7 de novembro às 16:20. Qual formato explícito interpreta essa convenção?
  1. "%m/%d/%Y %H:%M"
  2. "%d/%m/%Y %H:%M"
  3. "%d/%m/%Y %I:%M"
  4. "%Y/%m/%d %H:%M"
Mostrar respostaOcultar resposta
Resposta: B
A origem coloca o dia antes do mês, então %d/%m/%Y preserva 7 de novembro. %H:%M lê o horário de 24 horas e os minutos. A interpretação com mês primeiro produziria 11 de julho, uma data válida com significado errado, por isso uma conversão bem-sucedida, por si só, não basta.

Questão 3 de 10

Um índice contém 3, 1º e 2 de maio de 2025, uma vez cada. As datas já foram interpretadas. O que o prepara para uma seleção confiável de intervalos de datas?
  1. Ordenar o índice em ordem cronológica.
  2. Remover rótulos repetidos antes da seleção.
  3. Substituir o índice por números de mês.
  4. Preencher observações numéricas com o último valor válido.
Mostrar respostaOcultar resposta
Resposta: A
Os rótulos são valores de data e hora e são únicos, mas chegam fora de ordem. sort_index() estabelece a ordem cronológica necessária para uma seleção temporal confiável. Remover duplicatas não resolveria o problema porque o índice informado não contém marcas temporais repetidas.

Questão 4 de 10

Um índice ordenado tem uma linha por hora durante todo o dia 8 de julho de 2025. Quantas linhas .loc["2025-07-08 09:00":"2025-07-08 12:00"] seleciona?
  1. 3 linhas
  2. 12 linhas
  3. 24 linhas
  4. 4 linhas
Mostrar respostaOcultar resposta
Resposta: D
A fatia por rótulos inclui 09:00, 10:00, 11:00 e 12:00, totalizando quatro linhas. Tratar o fim como uma posição final de .iloc omitiria 12:00 e forneceria três. O fatiamento por rótulos de data e hora inclui ambos os extremos quando há linhas correspondentes.

Questão 5 de 10

Qual é a primeira marca temporal em pd.date_range("2025-08-19", periods=3, freq="MS")?
  1. 1º de agosto de 2025
  2. 1º de setembro de 2025
  3. 19 de agosto de 2025
  4. 31 de agosto de 2025
Mostrar respostaOcultar resposta
Resposta: B
A regra MS exige inícios de mês, então a primeira data correspondente igual ou posterior a 19 de agosto é 1º de setembro. 1º de agosto já está antes do início informado. A sequência não inclui 19 de agosto apenas porque essa data foi passada como limite inicial.

Questão 6 de 10

Um lembrete está datado de 30 de janeiro de 2025 e deve ser movido um mês de calendário para a frente. Qual data pd.DateOffset(months=1) produz?
  1. 1º de março de 2025
  2. 2 de março de 2025
  3. 28 de fevereiro de 2025
  4. 27 de fevereiro de 2025
Mostrar respostaOcultar resposta
Resposta: C
Ao avançar para fevereiro, o dia 30 só é preservado se existir. Fevereiro de 2025 termina no dia 28, então o deslocamento ajusta para 28 de fevereiro. Somar 30 dias decorridos chegaria a 1º de março, mas uma duração fixa é uma instrução diferente de um mês de calendário.

Questão 7 de 10

Um sensor registra temperaturas de 18, 24 e 21 °C durante um dia. O relatório pede a média das temperaturas registradas. Qual resultado diário a reamostragem deve fornecer?
  1. 21 °C
  2. 63 °C
  3. 24 °C
  4. 18 °C
Mostrar respostaOcultar resposta
Resposta: A
A média é a soma das três observações dividida por três, fornecendo 21 °C. Somar até 63 trata um nível de temperatura como uma quantidade aditiva e não responde à pergunta solicitada. Um máximo de 24 informaria o pico em vez da média.

Questão 8 de 10

Uma configuração de dispositivo é 12 em 1º de setembro e muda para 18 em 4 de setembro. Ela permanece entre as mudanças registradas. Quais valores diários uma grade preenchida deve mostrar de 1º a 4 de setembro?
  1. 12, 14, 16, 18
  2. 12, 18, 18, 18
  3. 12, 0, 0, 18
  4. 12, 12, 12, 18
Mostrar respostaOcultar resposta
Resposta: D
O preenchimento com o último valor válido propaga a última configuração conhecida até a próxima mudança, produzindo 12 em 2 e 3 de setembro. A interpolação linear criaria configurações intermediárias de 14 e 16, mas o dispositivo descrito não muda gradualmente entre registros. O significado da quantidade determina o método de preenchimento.

Questão 9 de 10

Para s = pd.Series([3, 9, 6, 12]), qual é o valor final de s.rolling(3).mean()?
  1. 6,0
  2. 9,0
  3. 7,5
  4. 12,0
Mostrar respostaOcultar resposta
Resposta: B
A janela final de três linhas contém 9, 6 e 12, cuja média é 9. O valor 7,5 é a média de todo o histórico de quatro linhas, que corresponderia a uma média expansiva. Uma janela móvel descarta 3 quando a quarta observação entra na janela.

Questão 10 de 10

Uma leitura de relógio sem fuso é “2025-07-15 10:00”, registrada em Amsterdã. Um registro em UTC tem eventos às 08:00 e às 10:00. Qual evento corresponde à leitura e como ela deve ser preparada?
  1. Atribuir o fuso de Amsterdã e converter para UTC; corresponde a 08:00.
  2. Atribuir UTC e converter para Amsterdã; corresponde a 10:00.
  3. Atribuir o fuso de Amsterdã e removê-lo; corresponde a 10:00.
  4. Atribuir UTC e remover o fuso; corresponde a 08:00.
Mostrar respostaOcultar resposta
Resposta: A
Amsterdã está duas horas à frente de UTC em julho, então suas 10:00 identificam 08:00 UTC. Primeiro, a atribuição de fuso define o local do registro; depois, a conversão preserva esse momento real em UTC. Atribuir UTC à leitura original do relógio identificaria um evento diferente, duas horas depois.
Conjunto 2: Comparar históricos e resultados de janelas10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

O que .dt.day_of_week retorna para uma observação de domingo?
  1. 0
  2. 1
  3. 7
  4. 6
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

As visitas são 320 na segunda-feira, 400 na terça-feira e 360 na quarta-feira. O que o pct_change() de quarta-feira informa?
  1. −0,10
  2. −0,125
  3. −40,0
  4. 0,90
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Uma organização usa trimestres fiscais com freq="Q-SEP". Qual intervalo pd.Period("2026Q1", freq="Q-SEP") descreve?
  1. Janeiro a março de 2026
  2. Julho a setembro de 2026
  3. Outubro a dezembro de 2025
  4. Outubro a dezembro de 2026
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Uma série de eventos tem 5 às 10:00, 8 às 10:05 e 2 às 10:09. Qual é o valor rotulado como 10:05 de resample("5min", closed="right", label="right").sum()?
  1. 13
  2. 8
  3. 10
  4. 15
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

O sensor A informa 6 em janeiro e 9 em março; o sensor B informa 4 em fevereiro. Uma tabela deve mostrar todos os sensores de janeiro a março e manter meses não observados como ausentes. Qual procedimento é adequado?
  1. Reamostrar todos os sensores mensalmente e copiar os totais para cada coluna de sensor.
  2. Agrupar apenas por número do mês e preencher rótulos de sensores ausentes com o último valor válido.
  3. Agregar por sensor e mês e reindexar para a grade completa de sensores e meses.
  4. Reamostrar por sensor com somas padrão e substituir todos os zeros por valores ausentes.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Para [2, NaN, 8, 14], quais são os dois últimos resultados de rolling(3, min_periods=2).mean()?
  1. 5,0 e 11,0
  2. NaN e NaN
  3. 6,0 e 12,0
  4. 5,0 e 8,0
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Os valores são 7 em 1º de abril, 4 em 3 de abril e 9 em 6 de abril, todos à meia-noite. Qual é o valor de rolling("3D").sum() em 6 de abril?
  1. 13
  2. 9
  3. 20
  4. 11
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Uma série é 80, 100, 75 e 90. Qual é a queda em relação ao máximo acumulado na quarta linha usando s / s.cummax() - 1?
  1. 0,20
  2. −0,25
  3. 0,125
  4. −0,10
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Um registrador emite “2025-01-10 09:00+01:00” e “2025-07-10 09:00+02:00”. O relatório deve preservar os instantes e mostrar o horário de Amsterdã. Qual sequência é adequada ao pandas 3?
  1. Interpretar com utc=True e converter para Europe/Amsterdam.
  2. Interpretar com utc=True e atribuir o fuso Europe/Amsterdam.
  3. Remover os deslocamentos e atribuir UTC às duas leituras.
  4. Interpretar sem deslocamentos e converter os resultados sem fuso para Amsterdã.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Um medidor em Amsterdã registra 2 kWh em cada hora real de 26 de outubro de 2025, com cobertura completa. Qual total diário e consumo horário médio seu relatório por dia local deve mostrar?
  1. 48 kWh e 2 kWh por hora registrada
  2. 50 kWh e aproximadamente 2,083 kWh por hora registrada
  3. 50 kWh e 2 kWh por hora registrada
  4. 46 kWh e 2 kWh por hora registrada
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 3: Escolher a operação de calendário adequada10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Uma coluna é ["2025-09-02", None, "2025-15-02", "bad"]. Ela é interpretada com format="%Y-%m-%d", errors="coerce". Quantos valores presentes na origem falharam na conversão?
  1. 1
  2. 2
  3. 3
  4. 4
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Um índice diário ordenado contém 2, 3 e 5 de novembro de 2025. O que um calendário completo de 1º a 6 de novembro revela que um calendário do mínimo ao máximo não revela?
  1. A data ausente interna, 4 de novembro.
  2. A data repetida, 3 de novembro.
  3. Os dias da semana de 2 e 5 de novembro.
  4. As datas ausentes nos extremos, 1º e 6 de novembro.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Um índice horário completo cobre de 1º a 3 de dezembro de 2025. Quantas linhas são selecionadas por .loc["2025-12-02":"2025-12-03"]?
  1. 48 linhas
  2. 25 linhas
  3. 24 linhas
  4. 47 linhas
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Quantas marcas temporais há em pd.date_range("2025-06-10", "2025-06-11", freq="6h") com a inclusão padrão dos extremos?
  1. 4
  2. 6
  3. 5
  4. 24
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Duas leituras ocorrem em 4 de fevereiro às 08:00 e em 21 de fevereiro às 17:00 de 2025. Seu índice é convertido em períodos mensais e depois de volta com .to_timestamp(). O que acontece com os rótulos e sua unicidade?
  1. Ambas mantêm seus dias originais, então os rótulos continuam únicos.
  2. Ambas se tornam 28 de fevereiro à meia-noite, então os rótulos se repetem.
  3. Elas se tornam 1º de fevereiro e 1º de março, então os rótulos continuam únicos.
  4. Ambas se tornam 1º de fevereiro à meia-noite, então os rótulos se repetem.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Leituras do nível de água são 20 cm em 10 de maio e 32 cm em 13 de maio. Após criar uma grade diária e aplicar interpolação linear, qual é a estimativa para 12 de maio?
  1. 28 cm
  2. 24 cm
  3. 26 cm
  4. 32 cm
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Uma loja tem vendas de 14 em janeiro e 22 em março, sem linha em fevereiro. Como as somas mensais padrão diferem entre a reamostragem por loja e o agrupamento por loja mais pd.Grouper?
  1. A reamostragem por loja omite fevereiro; a forma com Grouper o inclui como 0.
  2. A reamostragem por loja inclui fevereiro como 0; a forma com Grouper o omite.
  3. Ambas incluem fevereiro como NaN porque nenhuma venda foi observada.
  4. Ambas incluem fevereiro como 18 por interpolação entre as vendas.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Pedidos têm valores 8 em 1º de junho às 12:00, 12 em 2 de junho às 12:00 e 20 em 4 de junho às 12:00. Quais são a soma e a contagem finais de rolling("3D", min_periods=2) com os limites padrão?
  1. 32 e 2
  2. 40 e 3
  3. 20 e 1
  4. NaN e 1
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Para as leituras 6, 18 e 10, quais são a terceira EWMA recursiva e a terceira média expansiva, usando ewm(span=3, adjust=False)?
  1. 14 e aproximadamente 11,333
  2. 11 e 12
  3. 11 e aproximadamente 11,333
  4. 10 e aproximadamente 11,333
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Dois registros de Amsterdã mostram 26 de outubro de 2025 às 02:15. Um recebe fuso com ambiguous=True, o outro com ambiguous=False. Qual é a separação entre eles após a conversão para UTC?
  1. Eles identificam o mesmo momento em UTC.
  2. O primeiro é 1 hora anterior ao segundo.
  3. O primeiro é 1 hora posterior ao segundo.
  4. O primeiro é 2 horas anterior ao segundo.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 4: Diagnosticar cálculos de séries temporais10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Uma coluna interpretada tem o tipo de dados datetime64[us]. Uma exportação exige contagens inteiras em nanossegundos. Qual expressão para a coluna fornece essas contagens?
  1. s.dt.as_unit("ns").astype("int64")
  2. s.astype("int64")
  3. s.dt.as_unit("ms").astype("int64")
  4. s.dt.normalize().astype("int64")
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Uma contagem de tempo de um evento em UTC é armazenada como o valor Unix 1735689600000 em milissegundos. Quais argumentos de interpretação preservam a unidade e o fuso informados?
  1. unit="s", utc=True
  2. unit="us", utc=True
  3. unit="ms", utc=True
  4. unit="ms", utc=False
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

A série a tem 30 em 1º de agosto e 50 em 4 de agosto. Você calcula a - a.shift(1, freq="D"). Quais valores aparecem em 2 e 4 de agosto?
  1. −30 e 20
  2. 30 e 50
  3. NaN e 20
  4. NaN e NaN
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Para uma marca temporal já em 30 de abril de 2025, o que a soma de MonthEnd(0) e a soma de MonthEnd(1) produzem, respectivamente?
  1. 31 de maio e 31 de maio
  2. 30 de abril e 31 de maio
  3. 30 de abril e 30 de abril
  4. 30 de abril e 30 de maio
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Um período mensal de maio de 2025 é convertido com .asfreq("D", how="end") e depois com .to_timestamp() usando os padrões. Qual marca temporal resulta?
  1. 31 de maio de 2025 às 00:00
  2. 1º de maio de 2025 às 00:00
  3. 31 de maio de 2025 às 23:59:59,999999
  4. 1º de junho de 2025 às 00:00
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Uma sequência usa freq="B" de sexta-feira, 12 de setembro, até segunda-feira, 15 de setembro de 2025. Nenhum feriado personalizado é informado. Quais datas aparecem?
  1. 12, 13, 14 e 15 de setembro
  2. 13 e 14 de setembro
  3. Apenas 12 de setembro
  4. 12 e 15 de setembro
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Observações horárias em kWh cobrem um dia completo, incluindo sua leitura da meia-noite. Um relatório diário usa asfreq("D"). Por que o valor informado não é o total diário de energia?
  1. Ele soma todas as leituras horárias, mas rotula o resultado à meia-noite.
  2. Ele calcula a média diária e a multiplica pela contagem observada.
  3. Ele seleciona a leitura da meia-noite e omite as demais contribuições horárias.
  4. Ele preenche horas ausentes antes de selecionar a maior leitura horária.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Os valores diários de 1º a 7 de junho são 2, 6, 10, 14, 18, 22 e 26. Quais são os resultados rotulados como 4 de junho para rolling(5, center=True).mean() e para a janela padrão com término na observação atual de rolling(5).mean(), respectivamente?
  1. 10 e 10
  2. 14 e NaN
  3. 14 e 10
  4. 18 e 14
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Uma tabela está ordenada por loja e data. A loja A tem vendas 5, 7; a loja B tem vendas 20, 3. O relatório precisa de totais acumulados dentro de cada loja e de totais recentes de duas linhas dentro de cada loja. Quais são as duas sequências de saída de B?
  1. Acumulado: 32, 35; recente: 27, 23.
  2. Acumulado: 20, 23; recente: 20, 23.
  3. Acumulado: 12, 35; recente: NaN, 35.
  4. Acumulado: 20, 23; recente: NaN, 23.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Uma marca temporal com fuso é 20 de julho de 2025 às 14:00 em Amsterdã. Quais horários sem fuso resultam de tz_convert(None) e tz_localize(None), nessa ordem?
  1. 12:00 e 14:00
  2. 14:00 e 12:00
  3. 14:00 e 14:00
  4. 16:00 e 14:00
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 5: Combinar regras temporais em análises completas10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Uma origem envia ["2025-12-02", "03/12/2025"] e documenta datas com barras e dia primeiro. Qual interpretação a limpeza deve preservar?
  1. 2 de dezembro e 12 de março de 2025
  2. 12 de fevereiro e 3 de dezembro de 2025
  3. 12 de fevereiro e 12 de março de 2025
  4. 2 e 3 de dezembro de 2025
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Duas transações válidas compartilham uma marca temporal exata e têm valores 11 e 17. Um relatório precisa de um total por marca temporal antes da reindexação. Como os rótulos duplicados devem ser tratados?
  1. Manter a última transação, fornecendo 17.
  2. Agrupar por marca temporal e somar para obter 28.
  3. Calcular a média das transações, fornecendo 14.
  4. Manter a primeira transação, fornecendo 11.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Uma tabela horária ordenada em UTC deve informar a atividade de Tóquio das 09:00, inclusive, até as 17:00, exclusive, em cada data local. Qual ordem de operações e inclusão da janela de horário são adequadas?
  1. Converter para Tóquio e usar between_time(..., inclusive="left").
  2. Filtrar 09:00–17:00 em UTC e converter as linhas selecionadas para Tóquio.
  3. Converter para Tóquio e usar between_time(..., inclusive="both").
  4. Remover o fuso UTC, atribuir o fuso de Tóquio e incluir ambos os extremos.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

A loja A tem 40 e depois 60 unidades vendidas; a loja B tem 90 e depois 72, em ordem cronológica dentro de cada loja. Quais são as frações de crescimento de B com pct_change() agrupado e simples em toda a coluna?
  1. Agrupado: 0,50, −0,20; simples: NaN, −0,20.
  2. Agrupado: NaN, −0,25; simples: 1,25, −0,25.
  3. Agrupado: NaN, −0,20; simples: 0,50, −0,20.
  4. Agrupado: 0,50, −0,25; simples: NaN, −0,25.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Uma pessoa técnica agenda uma inspeção para as 08:45 no horário local de Amsterdã. A partir de 25 de outubro de 2025 às 08:45, qual operação avança para o mesmo horário do relógio no dia seguinte no pandas 3?
  1. Somar pd.Timedelta(hours=24).
  2. Somar pd.offsets.Day(1).
  3. Somar pd.Timedelta(hours=23).
  4. Somar pd.offsets.MonthEnd(0).
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Uma tabela abrange janeiro de 2024 e janeiro de 2025 para várias lojas. O relatório precisa de um total por loja para cada mês distinto do calendário. Quais chaves de agrupamento mantêm as identidades necessárias?
  1. Loja e df["date"].dt.month.
  2. Apenas pd.Grouper(key="date", freq="ME").
  3. Loja e pd.Grouper(key="date", freq="ME").
  4. Loja e df["date"].dt.day_of_week.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Um registro irregular de clientes precisa dos gastos nos 30 dias decorridos anteriores, incluindo o evento atual e excluindo o instante exatamente 30 dias antes. Qual cálculo é adequado após ordenar dentro de cada cliente?
  1. df.groupby("customer").rolling("30D", on="date")["amount"].sum()
  2. df.groupby("customer")["amount"].rolling(30).sum()
  3. df.groupby("customer").rolling("30D", on="date", closed="both")["amount"].sum()
  4. df.rolling("30D", on="date")["amount"].sum()
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Uma série horária em UTC cobre completamente o dia local de 30 de março de 2025 em Amsterdã. Quais são o início em UTC, o fim em UTC (exclusivo) e o número de horas desse dia local?
  1. 30 de março às 00:00; 31 de março às 00:00; 24 horas.
  2. 29 de março às 22:00; 30 de março às 23:00; 25 horas.
  3. 29 de março às 23:00; 30 de março às 23:00; 24 horas.
  4. 29 de março às 23:00; 30 de março às 22:00; 23 horas.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Uma série diária de energia tem leituras 4 em 2 de outubro e 7 em 4 de outubro de 2025. Registros ausentes indicam consumo desconhecido. O que 3 de outubro deve conter após resample("D").sum(min_count=1)?
  1. 0 kWh
  2. 5,5 kWh
  3. NaN
  4. 4 kWh
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Observações de chuva cobrem todos os dias de 1º de julho a 10 de agosto de 2025. As somas mensais são 93 mm e 50 mm. Quais são as médias por dia observado e o que se pode concluir sobre o total do mês completo de agosto?
  1. Julho: 3 mm; agosto: 5 mm; o total de agosto deve ser maior.
  2. Julho: 3 mm; agosto: 5 mm; o total de agosto permanece desconhecido.
  3. Julho: 3 mm; agosto: aproximadamente 1,61 mm; o total de agosto é menor.
  4. Julho: 93 mm; agosto: 50 mm; o total de agosto permanece desconhecido.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Travou em uma questão sua? Ajuda com Tarefas

Termos-Chave

85 Termos-Chave, cada um com sua definição

A

Abertura, máxima, mínima e fechamento (OHLC)
OHLC é uma agregação que retorna a primeira, a maior, a menor e a última observação em cada intervalo de tempo, chamadas abertura, máxima, mínima e fechamento.
O OHLC diário distingue a última leitura de um sensor da maior leitura alcançada naquele dia.
Acessor .dt
O acessor .dt disponibiliza recursos de data, hora e duração em uma coluna do pandas, incluindo componentes do calendário, arredondamento e conversão de unidades.
O acessor .dt em readings["time"].dt.hour fornece a hora registrada para agrupamento.
Agrupador temporal (Grouper)
Um agrupador temporal é um objeto de agrupamento do pandas que fornece regras de intervalos temporais dentro de groupby, junto com outras chaves, como loja ou sensor.
Uma chave de loja mais um agrupador temporal mensal preserva um histórico mensal separado para cada loja.
Alinhamento por marcas temporais
O alinhamento por marcas temporais associa observações por seus rótulos de data e hora durante operações aritméticas entre Series, em vez de associá-las por posição da linha.
O alinhamento por marcas temporais deixa ausente uma data sem correspondência quando dois históricos de lojas são somados.
Antecipação (lead)
Uma antecipação é um valor posterior colocado ao lado de uma observação anterior, tornando o valor seguinte disponível no rótulo da linha atual.
Uma antecipação de shift(-1) permite que uma tabela compare cada evento com o próximo evento registrado.
Argumento min_periods
O argumento min_periods define de quantos valores válidos uma janela precisa antes de produzir um resultado, ignorando células ausentes nessa contagem.
Uma janela de três linhas com uma célula ausente satisfaz min_periods=2, mas não min_periods=3.
Atraso da suavização
O atraso da suavização é a resposta tardia de uma média móvel a mudanças de direção, que geralmente aumenta quando mais valores antigos são mantidos.
O atraso da suavização faz uma média longa com término na observação atual responder lentamente após um aumento repentino nas leituras.
Atribuição de fuso horário
A atribuição de fuso horário atribui o fuso do registro a leituras de relógio sem fuso enquanto preserva suas horas e minutos locais exibidos.
A atribuição de fuso horário dá o significado de Tóquio a uma leitura de 09:00 sem fuso antes de sua conversão para UTC.
Aumento da frequência temporal (upsampling)
O aumento da frequência temporal move observações para uma grade de tempo mais fina e introduz posições vazias onde não há observação original nas novas marcas temporais.
O aumento da frequência temporal de leituras a cada três dias para rótulos diários cria datas intermediárias sem observações.
Avanço até a próxima data válida (rollforward)
O método rollforward() de um deslocamento encontra a âncora de calendário válida mais próxima igual ou posterior a uma data, mantendo a data se ela já estiver nessa âncora.
O rollforward() de uma regra MonthEnd move 15 de janeiro para 31 de janeiro do mesmo ano.

C

Código de frequência
Um código de frequência é uma string compacta que nomeia uma regra de repetição para operações de data e hora, como intervalos horários ou âncoras de calendário no fim do mês.
O código de frequência "15min" gera rótulos a cada quarto de hora, enquanto "ME" gera fins de mês.
Coerção de tipo
A coerção de datas substitui entradas que não podem ser interpretadas por NaT, permitindo concluir a conversão e mantendo valores inválidos marcados como ausentes.
Após a coerção, compare resultados ausentes com entradas presentes na origem para localizar datas cuja interpretação falhou.
Contagem de observações na janela
Uma contagem de observações na janela informa quantas observações não ausentes contribuem dentro de uma janela móvel, mostrando a quantidade de dados que sustenta sua estatística.
Uma contagem de observações na janela revela quando uma média móvel usa uma única leitura e outra usa dez.
Conversão de frequência de períodos
A conversão de frequência de períodos associa um período a outra frequência, usando um limite inicial ou final escolhido ao selecionar um intervalo mais fino.
A conversão de frequência de períodos com how="end" pode selecionar o último período diário de um mês.
Conversão de fuso horário
A conversão de fuso horário expressa em outro fuso um momento que já tem fuso, preservando o instante real enquanto altera sua exibição no relógio local.
A conversão de fuso horário transforma o meio-dia em Amsterdã no horário UTC apropriado para aquela data.
Correlação móvel
A correlação móvel mede a relação entre duas séries usando um conjunto móvel de observações pareadas, revelando mudanças ao longo do tempo.
A correlação móvel pode mostrar dois sensores variando juntos em um intervalo, mas com menos proximidade em outro.

D

Defasagem (lag)
Uma defasagem é um valor anterior colocado ao lado de uma observação posterior para comparação, com sua distância definida em linhas ou em tempo de calendário.
Uma defasagem de uma linha pode alcançar vários dias antes quando há lacunas entre as leituras de um sensor.
Desempilhamento de nível do índice
O desempilhamento de nível do índice move um nível do índice para colunas, criando uma tabela mais larga em que combinações ausentes são representadas como células ausentes por padrão.
O desempilhamento do nível de loja coloca o total mensal de cada loja ao lado dos demais em colunas.
Deslocamento de calendário (DateOffset)
Um DateOffset desloca uma marca temporal segundo componentes ou regras do calendário, permitindo que meses e anos variem em sua duração decorrida.
Um DateOffset de um mês ajusta 31 de janeiro para o último dia válido de fevereiro.
Deslocamento em relação ao UTC
Um deslocamento em relação ao UTC informa quanto um relógio local está adiantado ou atrasado em relação ao UTC em um momento, mas um deslocamento fixo, sozinho, não fornece regras sazonais.
O deslocamento em relação ao UTC de +05:30 coloca um relógio local cinco horas e trinta minutos à frente do UTC.
Deslocamento para o fim do mês (MonthEnd)
Um deslocamento MonthEnd move uma marca temporal para uma âncora de fim de mês do calendário, e sua contagem controla se uma data que já está na âncora avança.
Um deslocamento MonthEnd com contagem 0 mantém 30 de abril, enquanto a contagem 1 o move para 31 de maio.
Dia de calendário
Um dia de calendário avança a data local e preserva a leitura do relógio, então sua duração decorrida pode mudar durante transições de horário de verão.
Durante uma mudança de relógio na primavera, um dia de calendário pode deslocar o meio-dia atravessando apenas 23 horas decorridas.
Duração (Timedelta)
Um Timedelta é uma duração fixa que pode ser somada a uma marca temporal ou obtida pela subtração entre dois momentos.
Um Timedelta de 36 horas representa um dia mais doze horas, não apenas um dia inteiro.

E

Extremo esquerdo aberto
Um extremo esquerdo aberto exclui observações exatamente no início de um intervalo de tempo, mesmo quando o limite direito atual está incluído.
Um extremo esquerdo aberto faz uma janela móvel padrão de três dias em 5 de maio excluir 2 de maio à meia-noite.

F

Fatia por rótulos com extremos inclusos
Uma fatia por rótulos com extremos inclusos mantém rótulos correspondentes tanto no início quanto no fim, ao contrário de uma fatia por posições que exclui a posição final.
Uma fatia por rótulos com extremos inclusos de 10:00 a 13:00 mantém quatro linhas horárias quando todas estão presentes.
Fator de suavização
O fator de suavização alfa controla o peso da nova observação em uma média exponencialmente ponderada recursiva, ficando o restante com a média anterior.
Um fator de suavização de 0,5 dá peso igual à nova leitura e ao valor suavizado anterior.
Fechamento do intervalo
O fechamento do intervalo especifica qual limite de um intervalo de reamostragem pertence a ele, determinando onde são contadas observações exatamente no limite.
O fechamento do intervalo à direita atribui uma leitura exatamente às 10:05 ao intervalo que termina nesse horário.
Formato de interpretação de datas e horas
Um formato de interpretação especifica como campos de texto representam componentes de data e hora por meio de códigos para campos como ano, mês e minuto.
O formato de interpretação "%d/%m/%Y" lê “08/11/2025” como 8 de novembro em vez de 11 de agosto.
Frequência ancorada
Uma frequência ancorada seleciona pontos específicos do calendário, começando pelo primeiro ponto correspondente igual ou posterior ao limite informado.
Uma frequência ancorada em inícios de mês começa em 1º de setembro quando seu limite inicial é 19 de agosto.
Frequência de dias úteis
Uma frequência padrão de dias úteis gera datas de segunda a sexta-feira, pulando fins de semana e exigindo regras personalizadas explícitas para feriados.
Uma frequência de dias úteis inclui sexta e segunda-feira e pula o fim de semana entre elas.
Frequência inferida
Uma frequência inferida é uma regra de espaçamento regular detectada a partir de marcas temporais observadas, mesmo quando o índice não contém metadados de frequência armazenados.
Uma frequência inferida pode revelar um padrão mensal em três marcas temporais consecutivas de fim de mês.
Frequência por ocorrência de dia da semana no mês
Uma frequência por ocorrência de dia da semana no mês seleciona uma ocorrência específica desse dia em cada mês, como a terceira sexta-feira para um evento recorrente do calendário.
A frequência por ocorrência de dia da semana no mês "WOM-3FRI" cria datas recorrentes na terceira sexta-feira de cada mês.

H

Horário de verão
O horário de verão altera sazonalmente os deslocamentos dos relógios locais, produzindo uma hora pulada quando os relógios avançam e uma hora repetida quando retrocedem.
O horário de verão encurta o dia da mudança de primavera em Amsterdã, enquanto o UTC continua sem um salto.
Horário local ambíguo
Um horário local ambíguo é uma leitura de relógio repetida que pode identificar dois momentos distintos com deslocamentos diferentes durante uma mudança que atrasa o relógio.
O horário local ambíguo de 02:30 em Amsterdã em 26 de outubro de 2025 tem dois significados diferentes em UTC.
Horário local inexistente
Um horário local inexistente é uma leitura de relógio pulada por uma mudança que adianta o deslocamento, exigindo uma política quando dados sem fuso recebem um fuso.
O horário local inexistente de 02:30 em Amsterdã em 30 de março de 2025 precisa de uma política de atribuição de fuso.

I

Inclusão dos extremos
A inclusão dos extremos determina se os limites de início e fim que coincidem com a frequência aparecem em uma sequência de datas gerada, afetando o número de rótulos.
A inclusão padrão dos extremos fornece 25 rótulos horários de uma meia-noite até a seguinte.
Indexação por string parcial
A indexação por string parcial seleciona todas as marcas temporais que correspondem à precisão de uma string de data, como todas as observações dentro de um mês especificado.
A indexação por string parcial com "2025-09" mantém observações horárias ao longo de setembro.
Interpolação linear
A interpolação linear estima valores ausentes ao longo de uma linha reta entre valores conhecidos, usando incrementos iguais em uma grade com espaçamento uniforme.
A interpolação linear estima 12 e 14 entre extremos diários de 10 e 16 separados por três dias.
Interpretação de datas em formatos mistos
A interpretação de datas em formatos mistos interpreta cada string de data separadamente, permitindo diferentes formatos em uma coluna após verificar seus significados.
A interpretação de datas em formatos mistos ainda precisa de uma convenção conhecida de dia e mês para cada data de origem com barras.
Intervalo de agrupamento por dia local
Um intervalo de agrupamento por dia local agrupa momentos por data no fuso nomeado do índice, então sua duração decorrida pode diferir da de um dia UTC durante mudanças de relógio.
Um intervalo de agrupamento por dia local deve ser formado após converter um índice horário para o fuso horário usado no relatório.
Intervalo de agrupamento temporal
Um intervalo de agrupamento temporal é um intervalo usado para agrupar observações durante a reamostragem, com o pertencimento aos limites e um rótulo de saída definidos separadamente.
Um intervalo de agrupamento temporal terminado às 10:05 pode conter leituras após 10:00 até 10:05.
ISO 8601
ISO 8601 é uma notação de data e hora que coloca o ano antes do mês e do dia, tornando datas completas inequívocas entre convenções locais.
A data ISO 8601 “2025-08-17” tem o mesmo significado em configurações com dia primeiro e com mês primeiro.

Í

Índice de datas e horas (DatetimeIndex)
Um DatetimeIndex é um índice do pandas de rótulos de linha de data e hora que permite seleção por calendário e fornece uma base para cálculos baseados no tempo.
Um DatetimeIndex criado a partir de horários de eventos permite que .loc selecione um mês inteiro de relatório.
Índice de períodos (PeriodIndex)
Um PeriodIndex é um índice do pandas cujos rótulos são períodos com uma frequência comum, adequado a observações que descrevem intervalos de tempo recorrentes.
Somar um período mensal a um PeriodIndex avança cada rótulo em um mês de calendário inteiro.
Índice hierárquico (MultiIndex)
Um MultiIndex é um índice com vários níveis de rótulos, como loja e mês, que permite a um resultado manter mais de uma identidade de agrupamento.
Um MultiIndex de vendas pode identificar tanto a loja A quanto seu total de janeiro no mesmo rótulo de linha.
Índice monotonicamente crescente
Um índice temporal monotonicamente crescente mantém cada marca temporal igual ou posterior à anterior, permitindo rótulos iguais enquanto preserva a ordem.
Um índice monotonicamente crescente ainda pode ter duas compras válidas que compartilham a mesma marca temporal.

J

Janela baseada no tempo
Uma janela baseada no tempo seleciona observações dentro de uma duração fixa de tempo decorrido em relação a cada marca temporal, permitindo que seu número de linhas varie.
Uma janela baseada no tempo de três dias pode conter um pedido de cliente ou vários, dependendo dos horários.
Janela centralizada
Uma janela centralizada coloca sua saída no meio das observações que contribuem para ela, de modo que valores posteriores ao rótulo do resultado podem contribuir.
Uma janela centralizada rotulada na terça-feira pode usar observações registradas na quarta e na quinta-feira.
Janela de duração fixa
Uma janela de duração fixa tem uma única duração de tempo decorrido, como 24 horas ou 30 dias, ao contrário de intervalos de calendário cuja duração depende das datas.
Uma janela de duração fixa de 30 dias não pode ser substituída por uma regra de mês do calendário com duração variável.
Janela expansiva
Uma janela expansiva começa na primeira observação e cresce até a linha atual, mantendo todas as observações válidas anteriores com peso igual.
Uma janela expansiva dá menos influência a uma nova leitura após o acúmulo de um longo histórico.
Janela móvel
Uma janela móvel é uma seleção móvel de linhas ou horários usada para calcular repetidamente uma estatística à medida que a série avança.
Uma janela móvel de três linhas descarta a linha mais antiga quando uma nova linha entra no cálculo.
Janela móvel com término na observação atual
Uma janela móvel com término na observação atual termina na linha atual e usa observações iguais ou anteriores ao seu rótulo, sendo adequada a relatórios das informações disponíveis naquele momento.
Uma janela móvel diária com término na observação atual suaviza o consumo recente de energia sem depender das leituras de amanhã.
Janela por horário do dia
Uma janela por horário do dia seleciona observações pelo horário ao longo de várias datas, com escolhas explícitas sobre a inclusão de cada extremo.
Uma janela por horário do dia de 22:00–06:00 mantém a atividade do fim da noite e do início da manhã em cada data.

L

Lacuna no calendário
Uma lacuna no calendário é um rótulo temporal esperado sem uma linha correspondente, que pode ser encontrado comparando observações com um calendário completo.
Uma lacuna no calendário na quarta-feira está ausente de um índice diário que contém apenas terça e quinta-feira.
Limite do período
Um limite do período marca o início ou o momento final de um intervalo e é escolhido ao converter um rótulo de período em uma marca temporal.
Escolher o limite inicial do período fornece a meia-noite no começo do mês.

M

Marca temporal (Timestamp)
Um Timestamp é um objeto do pandas que representa um momento, com componentes do calendário e um fuso horário opcional para identificar sua localização.
Subtrair o Timestamp de início de um evento de seu Timestamp de fim fornece sua duração decorrida.
Marca temporal com fuso horário
Uma marca temporal com fuso horário contém informação de fuso, identificando um momento real que pode ser exibido em outro fuso sem alterar o instante.
A marca temporal com fuso horário 09:00+02:00 em Amsterdã identifica o mesmo evento de julho que 07:00 UTC.
Marca temporal duplicada
Uma marca temporal duplicada é um rótulo de linha compartilhado por mais de uma observação, que pode representar eventos válidos separados ou registros repetidos.
Uma marca temporal duplicada às 14:00 pode rotular duas compras que devem ser incluídas em um total de vendas.
Marca temporal sem fuso horário
Uma marca temporal sem fuso horário não tem fuso atribuído, fornecendo uma leitura de relógio sem identificar onde essa leitura local foi registrada.
A marca temporal sem fuso horário “2025-07-01 09:00” precisa de uma localização antes de ser associada a um evento UTC.
Marca temporal Unix
Uma marca temporal Unix conta unidades de tempo desde 1º de janeiro de 1970 à meia-noite UTC, então interpretar seu número exige conhecer a unidade.
Uma marca temporal Unix em milissegundos deve usar unit="ms", mesmo que uma contagem em segundos pareça semelhante.
Marcador de data ou hora ausente (NaT)
NaT é o marcador do pandas para datas, horas e durações ausentes, detectado com verificações de valores ausentes como pd.isna().
Uma data inválida submetida à coerção durante a interpretação se torna NaT, assim como entradas que já estavam ausentes.
Máscara de calendário
Uma máscara de calendário é um filtro booleano construído a partir de componentes de data, como dia da semana ou mês, que seleciona linhas que satisfazem uma condição recorrente do calendário.
Uma máscara de calendário que usa os números de dias da semana 5 e 6 mantém leituras de fim de semana em todo o conjunto de dados.
Máximo acumulado
Um máximo acumulado é o maior valor alcançado desde o início até a observação atual, permanecendo inalterado até chegar um valor maior.
Um máximo acumulado permanece em 120 quando uma série cai para 90, até chegar um valor maior.
Média móvel exponencialmente ponderada
Uma média móvel exponencialmente ponderada suaviza uma série reduzindo os pesos das observações mais antigas por um fator constante com o passar do tempo.
Uma média móvel exponencialmente ponderada com alfa 0,5 atualiza uma média anterior de 6 para 8 diante de um novo valor 10.
Método asfreq
A conversão de frequência com asfreq() coloca uma série em uma nova grade selecionando marcas temporais correspondentes, sem agregar as observações intermediárias.
O asfreq() diário em dados horários mantém leituras da meia-noite sem somar os valores do dia.
Método strftime
O método strftime transforma valores de data e hora em texto para exibição usando códigos de formato, mudando sua representação de datas e horas para strings.
Um relatório pode usar strftime para mostrar “17 Aug 2025” após concluir seus cálculos de data e hora.

N

Nome de fuso horário da IANA
Um nome de fuso horário da IANA identifica um conjunto regional de regras de fuso horário, geralmente na forma Área/Cidade, incluindo mudanças históricas e sazonais de deslocamento.
O nome de fuso horário da IANA “Europe/Amsterdam” fornece deslocamentos diferentes no inverno e no verão.
Normalização de datas e horas
A normalização de datas e horas define a parte de horário de um valor como meia-noite e mantém sua representação de data e hora para análise.
A normalização de datas e horas dá aos eventos rótulos de meia-noite e mantém seus valores utilizáveis como datas e horas.

P

Período (Period)
Um Period é um intervalo de tempo definido por um rótulo e uma frequência, como um mês ou trimestre, em vez de um momento individual registrado.
Um Period mensal pode rotular um total de vendas de março sem selecionar um dia arbitrário dentro de março.
Política de atribuição de fuso horário
Uma política de atribuição de fuso horário especifica como leituras locais puladas ou repetidas são resolvidas, por exemplo, escolhendo uma ocorrência, marcando como ausente ou deslocando.
Manter o texto bruto do relógio permite que uma pessoa analista inspecione leituras alteradas por uma política de atribuição de fuso que aplica deslocamentos.
Preenchimento com o próximo valor válido (backward fill)
O preenchimento com o próximo valor válido substitui valores ausentes pelo próximo valor conhecido, trazendo informações do futuro para posições vazias anteriores.
O preenchimento com o próximo valor válido aplicaria o saldo de amanhã a uma data em que essa informação não estava disponível.
Preenchimento com o último valor válido (forward fill)
O preenchimento com o último valor válido substitui valores ausentes pelo valor conhecido anterior mais recente, sendo adequado a um estado que permanece em vigor até mudar.
O preenchimento com o último valor válido propaga uma configuração de dispositivo pelos dias seguintes até sua próxima mudança registrada.

Q

Queda em relação ao máximo acumulado (drawdown)
Uma queda em relação ao máximo acumulado é a queda relativa de um valor em relação a seu máximo acumulado, calculada como o valor atual dividido por esse máximo, menos um.
Um valor de 90 após um máximo de 120 tem queda em relação ao máximo acumulado de −0,25, significando que está 25% abaixo desse máximo.

R

Reamostragem temporal (resampling)
A reamostragem temporal organiza uma série temporal em uma nova frequência, permitindo resumir observações em intervalos mais amplos ou colocá-las em uma grade mais fina.
A reamostragem temporal de leituras horárias de energia com somas diárias fornece um total de energia para cada dia.
Reamostragem temporal por grupo
A reamostragem temporal por grupo aplica uma operação de frequência temporal separadamente dentro da identidade de cada série, preservando históricos independentes em uma tabela no formato longo.
A reamostragem temporal por grupo mantém os intervalos mensais de um sensor separados das leituras de sensores vizinhos.
Redução da frequência temporal (downsampling)
A redução da frequência temporal passa de uma frequência temporal mais fina para uma mais ampla, geralmente combinando várias observações com uma agregação escolhida.
A redução da frequência temporal de chuva diária para somas mensais mantém milímetros como unidade do total.
Resolução temporal
A resolução de data e hora é a unidade usada para contagens de tempo armazenadas, como microssegundos ou nanossegundos, e determina sua precisão e seu intervalo.
Converter uma coluna com resolução de microssegundos para inteiros fornece contagens de microssegundos desde a época.
Retrocesso até a data válida anterior (rollback)
O método rollback() de um deslocamento encontra a âncora de calendário válida mais próxima igual ou anterior a uma data, mantendo a data se ela já estiver nessa âncora.
O rollback() de uma regra MonthEnd move 15 de janeiro para 31 de dezembro do ano anterior.
Rótulo do intervalo
Um rótulo do intervalo é a marca temporal atribuída a um intervalo temporal agregado, que identifica o resultado sem determinar quais observações pertencem a ele.
Um rótulo do intervalo de 30 de junho pode nomear um trimestre que contém apenas observações de abril.

S

Sequência de datas
Uma sequência de datas é uma sequência de rótulos de data e hora gerada a partir de limites, uma contagem e uma regra de frequência, frequentemente usada como calendário esperado.
Uma sequência de datas com 24 rótulos horários pode definir o índice de destino para um dia comum completo.
Série temporal
Uma série temporal é uma coleção de observações associadas a momentos ou intervalos de tempo, permitindo estudar valores em sua ordem temporal.
Uma série temporal de consumo horário de energia permite que uma pessoa analista compare a demanda em diferentes horários do dia.
Soma acumulada
Uma soma acumulada adiciona cada nova observação ao total anterior, produzindo um valor acumulado que pode recomeçar dentro de grupos separados.
Agrupar vendas por ano antes de uma soma acumulada inicia um novo total acumulado no ano a cada janeiro.

T

Tempo Universal Coordenado (UTC)
UTC é o Tempo Universal Coordenado, a referência de tempo compartilhada usada para alinhar momentos entre fusos sem mudanças sazonais de relógio por horário de verão.
Converter registros regionais de eventos para UTC permite associar seus momentos reais de forma consistente.
Trimestre fiscal
Um trimestre fiscal é um intervalo de relatório de três meses dentro de um ano fiscal definido por um mês de término que pode ser diferente de dezembro.
Com Q-JUN, o primeiro trimestre fiscal de 2025 cobre de julho a setembro de 2024.

V

Variação relativa
Uma variação relativa é o valor atual dividido por seu valor de comparação, menos um, fornecendo o crescimento em relação a esse valor anterior.
Uma variação relativa de −0,15 significa que a quantidade atual está 15% abaixo de seu valor de comparação.

Sobre esta aula

Por StudeliRelatar um erro

Crie seus próprios Materiais de Estudo

Transforme suas anotações, slides e documentos em Guias de Estudo, Questões de Prática, Flashcards e mais 6 ferramentas.

Começar