1
resposta

Estou tendo o seguinte retorno poderiam me ajudar por favor?

Ola estou enfrentando um problema relacionado no aninhamento da colunana hora de transformar em datetime: Codigo:

Transformar para o tipo datetime definindo o formato de data como DD/MM/AAAA ('%d/%m/%Y')

dados['datas_combinadas_pagamento'] = pd.to_datetime(dados['datas_combinadas_pagamento'], format='%d/%m/%Y') #Linha que deu erro dados['datas_de_pagamento'] = pd.to_datetime(dados['datas_de_pagamento'], format='%d/%m/%Y')

Visualizar o resultado

dados

Para contribuir na solução do contexto é possível calcular a diferença de dias

entre a data combinada e a data de pagamento com dt.days

dados['atraso'] = (dados['datas_de_pagamento'] - dados['datas_combinadas_pagamento']).dt.days

Observar o novo DataFrame

dados

Calcular a média de tempo de atraso por apartamentos

media_atraso = dados.groupby(['apartamento'])['atraso'].mean()

Visualizar o resultado

media_atraso

Erro: ValueError: time data "['01/06/2022', '01/07/2022']" doesn't match format "%d/%m/%Y", at position 0. You might want to try: - passing format if your strings have a consistent format; - passing format='ISO8601' if your strings are all ISO8601 but not necessarily in exactly the same format; - passing format='mixed', and the format will be inferred for each element individually. You might want to use dayfirst alongside this.

1 resposta

Oi Gustavo,

O erro que você está enfrentando, ValueError: time data "['01/06/2022', '01/07/2022']" doesn't match format "%d/%m/%Y", indica que a função pd.to_datetime está recebendo uma lista de strings como entrada, e não uma string individual como esperado.

Isso acontece porque a coluna datas_combinadas_pagamento (e possivelmente datas_de_pagamento) contém listas de datas, e não datas diretamente. 😳

Para corrigir isso, você precisa aplicar a conversão para datetime em cada elemento da lista dentro da coluna.

Veja um exemplo:

import pandas as pd

# Supondo que seu DataFrame 'dados' já esteja carregado

# Função para converter uma lista de strings em datetime
def converter_lista_datas(lista_datas):
    return [pd.to_datetime(data, format='%d/%m/%Y') for data in lista_datas]

# Aplicando a conversão nas colunas
dados['datas_combinadas_pagamento'] = dados['datas_combinadas_pagamento'].apply(converter_lista_datas)
dados['datas_de_pagamento'] = dados['datas_de_pagamento'].apply(converter_lista_datas)

# Agora, para calcular o atraso, você precisa acessar o primeiro elemento da lista de datas
dados['atraso'] = (dados['datas_de_pagamento'].apply(lambda x: x[0]) - dados['datas_combinadas_pagamento'].apply(lambda x: x[0])).dt.days

# Calcular a média de tempo de atraso por apartamentos
media_atraso = dados.groupby(['apartamento'])['atraso'].mean()

print(dados)
print(media_atraso)

Primeiro definimos uma função converter_lista_datas para converter cada string em datetime dentro de uma lista.

Em seguida, aplicamos essa função nas colunas datas_combinadas_pagamento e datas_de_pagamento usando apply.

Depois, para calcular o atraso, acessamos o primeiro elemento da lista de datas convertidas. 💪

Para saber mais: Documentação oficial do Pandas sobre to_datetime.

Continue praticando e explorando as funcionalidades do Pandas! 💯