Pandas & NumPy Academy · Aula

Reamostragem de séries temporais

Reduza dados diários para dados mensais com resample('ME').sum() e aumente a frequência usando preenchimento para a frente para completar intervalos ausentes.

Aula 2 de 413 etapas

Reamostragem de séries temporais é uma aula grátis de Pandas & NumPy Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Pandas & NumPy Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Pandas & NumPy Academy inclui 4 aulas no total.

O que é reamostragem

Reamostragem altera a frequência de uma série temporal. A redução da frequência diminui a frequência — por exemplo, convertendo dados diários em totais mensais. O aumento da frequência eleva a frequência — por exemplo, convertendo dados mensais em diários e preenchendo lacunas com valores interpolados. Ambas as operações exigem um DatetimeIndex e são realizadas com o método resample(), a versão do Pandas de groupby() sensível ao tempo.

O método resample()

df.resample(rule) cria um objeto DatetimeIndexResampler, no qual rule é um alias de deslocamento de frequência. Assim como em groupby(), nada é calculado até que você encadeie um método de agregação. Regras comuns: 'D' (dia), 'W' (semana), 'ME' (fim do mês), 'QE' (fim do trimestre) e 'YE' (fim do ano). O DataFrame deve ter um DatetimeIndex.

import pandas as pd
import numpy as np

np.random.seed(42)
dates = pd.date_range('2024-01-01', periods=90, freq='D')
df = pd.DataFrame({'sales': np.random.randint(100, 500, 90)}, index=dates)

print(df.head())
print('Shape:', df.shape)  # (90, 1) -- 90 daily rows

Redução da frequência: de diário para mensal

Para reduzir a frequência de dados diários para mensais, chame resample('ME') e encadeie uma agregação. sum() fornece os totais mensais; mean() fornece as médias mensais; last() fornece o último valor de cada período. O resultado tem uma linha por período, com a data de fim do período como rótulo do índice.

# Monthly totals
monthly_sum = df.resample('ME').sum()
print(monthly_sum)
# sales
# 2024-01-31    9876
# 2024-02-29    8765
# 2024-03-31    9234

# Monthly averages
monthly_mean = df.resample('ME').mean().round(1)
print(monthly_mean)

Redução da frequência para semanal

Faça a reamostragem com 'W' para agregar por semana do calendário terminando no domingo. Use 'W-MON' se quiser semanas terminando na segunda-feira. O Pandas agrupa todas as datas de cada semana e aplica a agregação. Isso é útil para relatórios semanais nos quais você quer uma linha de resumo por semana.

# Weekly sum
weekly = df.resample('W').sum()
print(weekly.head())
# sales
# 2024-01-07    2010  <- Jan 1-7
# 2024-01-14    2340  <- Jan 8-14
# ...

# Weekly max and count using agg()
weekly_stats = df.resample('W').agg(['sum', 'mean', 'max'])
print(weekly_stats.head())

Aplicando várias agregações

Assim como em groupby(), você pode encadear .agg() em um reamostrador para calcular várias estatísticas em uma única passagem. Passe uma lista de nomes de funções ou um dicionário para agregações nomeadas. Essa é a maneira mais eficiente de criar uma tabela abrangente de resumo de séries temporais.

monthly_stats = df.resample('ME').agg(
    total_sales=('sales', 'sum'),
    avg_sales=('sales', 'mean'),
    peak_sales=('sales', 'max'),
    days_counted=('sales', 'count')
)
print(monthly_stats.round(1))
#             total_sales  avg_sales  peak_sales  days_counted
# 2024-01-31         9876      318.6         499            31

Reamostragem OHLC para dados financeiros

Para séries temporais financeiras, o método .ohlc() reamostra os valores Open, High, Low, Close (OHLC) de cada período — a representação padrão em candlestick. Isso só é significativo para dados numéricos que representam um preço ou nível. Cada coluna da entrada gera quatro colunas OHLC na saída.

# OHLC monthly resampling
ohlc = df['sales'].resample('ME').ohlc()
print(ohlc)
#             open  high   low  close
# 2024-01-31   365   499   101    243
# 2024-02-29   ...

Aumento da frequência: de mensal para diário

O aumento da frequência eleva a frequência, criando linhas para marcas temporais que não existiam nos dados originais. Essas novas linhas inicialmente contêm NaN. Em seguida, preencha-as com um método adequado aos seus dados: ffill() (preenchimento para frente — transporta o último valor conhecido) ou bfill() (preenchimento para trás — usa o próximo valor conhecido), ou interpolate() para uma interpolação suave.

# Monthly data
monthly = pd.Series(
    [100, 120, 115],
    index=pd.date_range('2024-01-31', periods=3, freq='ME')
)
print(monthly)

# Upsample to daily (creates NaN rows)
daily = monthly.resample('D').asfreq()
print(daily.head(10))
# 2024-01-31    100.0
# 2024-02-01      NaN  <- new row
# ...

Preenchendo lacunas após o aumento da frequência

Depois de aumentar a frequência, preencha as lacunas NaN criadas para as novas marcas temporais. ffill() propaga o último valor conhecido até a próxima observação real — uma boa opção para preços, quando o último preço negociado continua válido. interpolate(method='linear') preenche com valores espaçados linearmente entre as observações — uma boa opção para variáveis contínuas suaves.

# Forward fill: carry monthly value forward to every day
daily_ffill = monthly.resample('D').ffill()
print(daily_ffill.head(35))
# 2024-01-31    100
# 2024-02-01    100  <- forward filled
# ...
# 2024-02-29    120  <- new month value

# Linear interpolation
daily_interp = monthly.resample('D').interpolate(method='linear')
print(daily_interp.head(10))

Reamostragem dentro de grupos

Você pode combinar groupby() e resample() para reamostrar cada grupo separadamente. Chame groupby(column).resample(rule) em um DataFrame com DatetimeIndex. Isso produz um resultado com MultiIndex, no qual o nível externo é a chave do grupo e o nível interno é o período temporal reamostrado — muito útil para análises de séries temporais por produto ou região.

df2 = pd.DataFrame({
    'product': ['A', 'B', 'A', 'B', 'A', 'B'],
    'sales': [100, 150, 120, 130, 110, 160]
}, index=pd.date_range('2024-01-01', periods=6, freq='ME'))

# Monthly sum per product
result = df2.groupby('product').resample('QE').sum()
print(result)

Ancoragem de deslocamento personalizado

Por padrão, 'ME' ancora nas datas do fim do mês do calendário. Para períodos fiscais não padrão, use deslocamentos como 'QS-APR' (trimestre iniciado em abril) ou 'YS-OCT' (ano iniciado em outubro). O Pandas oferece suporte a muitos aliases de deslocamento ancorados. Consulte a documentação do Pandas para ver a lista completa ao trabalhar com períodos fiscais que não seguem o calendário.

# Fiscal year starting in April
fiscal_annual = df.resample('YE-MAR').sum()
print(fiscal_annual)
# sales
# 2024-03-31    XXXX  <- April 2023 to March 2024

# Quarter starting in April
fiscal_q = df.resample('QE-MAR').mean().round(0)
print(fiscal_q)

Verificando a integridade do resultado reamostrado

Depois da reamostragem, verifique sempre se o resultado faz sentido. Confira se o número de períodos de saída corresponde ao esperado, se não há períodos ausentes (procure por NaN na saída) e se a soma dos totais mensais é igual à soma dos dados diários originais ao reduzir a frequência com sum(). Essas verificações de consistência detectam erros de deslocamento de uma unidade nas strings de frequência e intervalos de datas ausentes.

monthly = df.resample('ME').sum()

# Verify: monthly totals should sum to daily total
assert monthly['sales'].sum() == df['sales'].sum(), 'Sum mismatch!'

# Verify: expected number of months
print('Months:', len(monthly))  # should be 3 for 90 days Jan-Mar

# Check for any NaN
print('NaN count:', monthly.isna().sum().sum())

Verificação rápida

Teste sua compreensão da reamostragem de séries temporais desta lição.

Recapitulação da lição

Nesta lição, você aprendeu que resample() é o equivalente de groupby() sensível ao tempo para alterar a frequência de séries temporais; a redução da frequência agrega dados (de diário para mensal com sum/mean); o aumento da frequência cria novas marcas temporais que devem ser preenchidas com ffill() ou interpolate(); e é possível combinar groupby() com resample() para agregar dados temporais por grupo. Em seguida, exploraremos deslocamentos e recursos de defasagem.

Grátis para começar

Aprenda Python com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
30
Aulas
120

Perguntas Frequentes

A aula “Reamostragem de séries temporais” é grátis?

Sim — o texto completo de “Reamostragem de séries temporais” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Pandas & NumPy Academy, atualize para CoddyKit PRO. O curso de Pandas & NumPy Academy inclui 4 aulas no total.

O que vou aprender em “Reamostragem de séries temporais”?

Reduza dados diários para dados mensais com resample('ME').sum() e aumente a frequência usando preenchimento para a frente para completar intervalos ausentes. Você pratica Pandas & NumPy Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Pandas & NumPy Academy?

Nenhuma experiência prévia é necessária. Pandas & NumPy Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Reamostragem de séries temporais”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Pandas & NumPy Academy?

Sim. Cada aula de Pandas & NumPy Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. DatetimeIndex e intervalos de períodos
  2. Reamostragem de séries temporais
  3. Deslocamentos e variáveis defasadas
  4. Extraindo características temporais
← Voltar para Pandas & NumPy Academy