HOWTO · Pandas
Como extrair mês e ano separadamente da coluna de data e hora em Pandas
Extraia valores numéricos de ano e mês de uma coluna datetime do Pandas com o acessor .dt, ou formate-os como strings com strftime().
Nesta página
Use um acessor datetime de Series para adicionar colunas separadas de ano e mês: dates.dt.year e dates.dt.month. Essas propriedades retornam componentes numéricos. Se a coluna de origem contiver strings de data, converta-a uma vez com pandas.to_datetime antes de usar .dt. Escolha strftime() quando o resultado dever ser texto, como um mês formatado como 01.
Extrair mês e ano com Series.dt.year e Series.dt.month
O acessor .dt expõe propriedades de data e hora em uma Series do Pandas. Em particular, pandas.Series.dt.year e pandas.Series.dt.month retornam o ano e o mês como valores numéricos; são propriedades, portanto não adicione parênteses a elas. A referência do ano da Series documenta a propriedade de ano.
Converta a coluna de entrada com pandas.to_datetime quando os valores forem strings. O exemplo abaixo começa com strings de data ISO, converte a coluna e atribui os dois componentes extraídos. O exemplo converte as strings de data, atribui os valores numéricos de ano e mês e imprime o DataFrame resultante.
import pandas as pd
df = pd.DataFrame({"joined": ["2019-11-20", "2020-01-02", "2020-02-05"]})
df["joined"] = pd.to_datetime(df["joined"])
df["year"] = df["joined"].dt.year
df["month"] = df["joined"].dt.month
print(df)
joined year month
0 2019-11-20 2019 11
1 2020-01-02 2020 1
2 2020-02-05 2020 2
Se uma coluna já tiver o tipo datetime, ignore a linha de conversão e aplique as duas propriedades diretamente. A análise depende de os valores representarem datas em um formato que o Pandas consiga interpretar; normalize ou analise explicitamente strings de origem com formatos diferentes antes de extrair os componentes. A propriedade de mês é numérica, por isso janeiro é representado por 1, o que é útil para ordenação ou comparações numéricas.
Formatar ano e mês com strftime()
Use strftime() quando o código posterior precisar de strings formatadas em vez de componentes numéricos. Com o acessor .dt da Series, %Y formata um ano de quatro dígitos e %m formata um mês de dois dígitos. Para a data 2020-01-02, esses formatos correspondem às strings 2020 e 01.
Esta versão usa a mesma conversão de entrada e adiciona colunas de texto. A string do mês permanece com zero à esquerda, o que é útil para rótulos ou chaves de ano-mês. Como esses valores são strings, converta-os em números se forem necessários cálculos posteriores ou uma ordenação numérica.
import pandas as pd
df = pd.DataFrame({"joined": ["2019-11-20", "2020-01-02", "2020-02-05"]})
df["joined"] = pd.to_datetime(df["joined"])
df["year"] = df["joined"].dt.strftime("%Y")
df["month"] = df["joined"].dt.strftime("%m")
print(df)
joined year month
0 2019-11-20 2019 11
1 2020-01-02 2020 01
2 2020-02-05 2020 02
Use as propriedades numéricas .dt.year e .dt.month quando quiser valores para aritmética ou comparações numéricas. Use strftime() quando o formato de apresentação importar ou quando for necessário um mês de largura fixa, como 01. Ambas as abordagens operam sobre valores que já têm o tipo datetime.
Extrair mês e ano com DatetimeIndex.year e DatetimeIndex.month
Também pode envolver uma Series datetime em pandas.DatetimeIndex e depois ler os seus atributos year e month. A referência do DatetimeIndex descreve este tipo de índice. Esses atributos fornecem componentes numéricos, tal como o acessor de Series, e podem ser atribuídos a colunas do DataFrame numa única etapa.
import pandas as pd
df = pd.DataFrame({"joined": ["2019-11-20", "2020-01-02", "2020-02-05"]})
df["joined"] = pd.to_datetime(df["joined"])
dates = pd.DatetimeIndex(df["joined"])
df["year"] = dates.year
df["month"] = dates.month
print(df)
joined year month
0 2019-11-20 2019 11
1 2020-01-02 2020 1
2 2020-02-05 2020 2
Use DatetimeIndex quando um objeto de índice se adequar ao restante do seu fluxo de trabalho; para uma coluna de Series comum, as propriedades .dt costumam ser a expressão mais direta. As duas abordagens produzem valores numéricos de ano e mês, enquanto strftime() produz strings. Em cada caso, certifique-se primeiro de que a origem tem o tipo datetime. Estes exemplos usam strings apenas com data; quando os timestamps incluem fusos horários, tenha em conta o fuso horário pretendido, porque o ano e o mês do calendário dependem da data local do timestamp.