1
resposta

Aula 4: Atividade 7 (não aparece a coluna semana no df_final2)

def criar_features(df,label=None):
    df = df.copy()
    df['diasemana'] = df['mes'].dt.dayofweek
    df['mês'] = df['mes'].dt.month
    df['diamês'] = df['mes'].dt.day
    df['semana'] = df['mes'].dt.weekofyear

    X = df[['diasemana','mês','diamês','semana']]

    if label:
        y = df[label]
        return X,y
    return X

X.y = criar_features(df_sp,label='Obitos')
df_final2 = pd.concat([X,y],axis=1)

Ao rodar o código da atividade (mostrado acima) no Jupyter aparece a seguinte mensagem:

:6: FutureWarning: Series.dt.weekofyear and Series.dt.week have been deprecated. Please use Series.dt.isocalendar().week instead. df['semana'] = df['mes'].dt.weekofyear

Eu fiz a modificação solicitada:

def criar_features(df,label=None):
    df = df.copy()
    df['diasemana'] = df['mes'].dt.dayofweek
    df['mês'] = df['mes'].dt.month
    df['diamês'] = df['mes'].dt.day
    df['semana'] = df['mes'].dt.isocalendar().week

    X = df[['diasemana','mês','diamês','semana']]

    if label:
        y = df[label]
        return X,y
    return X
X.y = criar_features(df_sp,label='Obitos')
df_final2 = pd.concat([X,y],axis=1)

Após isso executei o comando:

df_final2.head()

Entretanto ao visualizar o DataFrame df_final2 não tem a coluna da semana. Por quê isso ocorre?

OBS: O comando dt.isocalendar().week esta funcionando, pois eu consigo adicionar os valores no df_final2 assim:

df_final2['semana'] = df_sp['mes'].dt.isocalendar().week
1 resposta

Boas Rodolfo! Tudo bem? Espero que sim.

Desculpe pela demora em entrar em contato.

Algo bastante parecido aconteceu comigo. Vou compartilhar minha solução que creio que vá resolver os problemas que você encontrou.

O código da instrutora:

def criar_features(df,label=None):
    df = df.copy()
    df['diasemana'] = df['mes'].dt.dayofweek
    df['mês'] = df['mes'].dt.month
    df['diamês'] = df['mes'].dt.day
    df['semana'] = df['mes'].dt.weekofyear

    X = df[['diasemana','mês','diamês','semana']]

    if label:
        y = df[label]
        return X,y
    return X

X.y = criar_features(df_sp,label='Obitos')
df_final2 = pd.concat([X,y],axis=1)

Tem um pequeno problema. Examinando a ordem das linhas:

df['mês'] = df['mes'].dt.month
df['diamês'] = df['mes'].dt.day
df['semana'] = df['mes'].dt.weekofyear

Essa ordem parece não fazer muito sentido. Vamos por partes:

Como agora temos uma coluna mes do dataFrame original (que é passado como argumento da função) e uma coluna mês (com acento) foi adicionada, isso pode causal ambiguidade para quando vamos manipular os dados, ou mesmo para entender qual coluna mes o código se refere.

Para evitar esse tipo de errro, eu recomendo simplesmente trocar a ordem da criação das colunas para que a coluna df['mês'] seja a útima a ser criada, e também recomendo tirar os acentos de mês e diamês.

O código ficará da seguinte forma:

def criar_features(df, label=None):
    df = df.copy()
    df['diasemana'] = df['mes'].dt.day_of_week
    df['diames'] = df.mes.dt.day
    df['mes'] = df.mes.dt.month


    X = df[['diasemana', 'mes', 'diames']]

    if label:
        y= df[label]
        return X, y
    return X

Espero ter ajudado! Bons estudos!