Esse é o erro que estou recebendo
Esse é o erro que estou recebendo
Oii, Reinaldo! Tudo certo contigo?
Você pode checar se a parte do código pd.to_datetime
está deste modo:
dados = pd.DataFrame.from_dict(response.json())
dados['Data da Compra'] = pd.to_datetime(dados['Data da Compra'], format = '%d/%m/%Y')
Pois pela sua imagem a função dados.set_index()
parece estar certinha, então é capaz que algum erro na conversão da coluna aconteceu antes.
Se a dúvida persistir, estamos aqui! :)
Abraços!
Boa noite Maria, tudo em paz e contigo?
Meu código estpa exatamente assim como você digitou.
import streamlit as st
import requests
import pandas as pd
import plotly.express as px
st.set_page_config(layout= 'wide')
def formata_numero(valor, prefixo= ''):
for unidade in ['', 'mil']:
if valor <1000:
return f'{prefixo} {valor:.2f} {unidade}'
valor /=1000
return f'{prefixo} {valor:.2f} milhões'
st.title("DASHBOARD DE VENDAS :shopping_trolley:")
url = 'https://labdados.com/produtos'
response = requests.get(url)
dados = pd.DataFrame.from_dict(response.json())
dados['Dados da Compra'] = pd.to_datetime(dados['Data da Compra'], format = '%d/%m/%Y')
## Tabelas
receita_estados = dados.groupby('Local da compra')[['Preço']].sum()
receita_estados = dados.drop_duplicates(subset= 'Local da compra')[['Local da compra', 'lat', 'lon']].merge(receita_estados,
left_on='Local da compra', right_index = True).sort_values('Preço', ascending=False)
receita_mensal = dados.set_index('Data da Compra').groupby(pd.Grouper(freq = 'M'))['Preço'].sum().reset_index()
receita_mensal['Ano'] = receita_mensal['Data da Compra'].dt.year
receita_mensal['Mes'] = receita_mensal['Data da Compra'].dt.month_name()
##Gráficos
fig_mapa_receita = px.scatter_geo(receita_estados,
lat = 'lat',
lon = 'lon',
scope= 'south america',
size = 'Preço',
template = 'seaborn',
hover_name = 'Local da compra',
hover_data = {'lat':False, 'lon': False},
title = 'Reiceita por estado')
fig_receita_mensal = px.line(receita_mensal,
x = 'Mes',
y = 'Preço',
markers=True,
range_y=(0, receita_mensal.max()),
color = 'Ano',
line_dash = 'Ano',
title= 'Receita mensal')
fig_receita_mensal.update_layout(yaxis_title = 'Receita')
## Visualização no Streamlit
col1, col2 = st.columns(2)
with col1:
st.metric('Receita', formata_numero(dados['Preço'].sum(), 'R$'))
st.plotly_chart(fig_mapa_receita, use_container_width=True)
with col2:
st.metric('Quantidade de vendas', formata_numero(dados.shape[0]))
st.plotly_chart(fig_receita_mensal, use_container_width=True)
st.dataframe(dados)
Reinaldo, desculpe a demora!
Depois do trecho de código
dados['Dados da Compra'] = pd.to_datetime(dados['Data da Compra'], format = '%d/%m/%Y')
Você pode adicionar o seguinte código, por favor?
dados.set_index('Data da Compra', inplace=True)
Ele define a coluna Data da Compra como o índice para o df dados.
Se a dúvida persistir, estamos aqui! :)
Abraços!
Obrigado pela ajuda Maria mas continuo com o mesmo erro depois da adcionar essa linha
Olá Reinaldo, tudo bem? Espero que sim!
O problema ocorreu porque você criou uma coluna como nome Dados da compra nesse código:
dados['Dados da Compra'] = pd.to_datetime(dados['Data da Compra'], format = '%d/%m/%Y')
Depois disso, tentou setar o índice Data da compra, e esse não é o mesmo nome de coluna que está em formato de data. A confusão foi feita pelo nome da coluna apenas.
receita_mensal = dados.set_index('Data da Compra').groupby(pd.Grouper(freq = 'M'))['Preço'].sum().reset_index()
Coloque o mesmo nome da coluna na transformação para datetime e também no momento de setar o índice:
dados['Data da Compra'] = pd.to_datetime(dados['Data da Compra'], format = '%d/%m/%Y')
...
receita_mensal = pd.DataFrame(dados.set_index('Data da Compra').groupby(pd.Grouper(freq = 'M'))['Preço'].sum()).reset_index()
Bons estudos!