1
resposta

Exercício com pandas - resultado diferente do mostrado

Olá. Fiquei curiosa com uma coisa, eu copiei o exercício "Criando DataFrames" com as mesmas linhas de código que estão lá. Só que quando eu rodo no notebook, o resultado que me dá ordena as colunas como km, ano e km_media, quando a ordem deveria ser ano, km e km_media. No dicionário criado como resultado da função km_media a ordem está correta, mas quando crio o DataFrame troca. Alguém poderia me dizer porque?

dados = {
    'Crossfox': {'km': 35000, 'ano': 2005}, 
    'DS5': {'km': 17000, 'ano': 2015}, 
    'Fusca': {'km': 130000, 'ano': 1979}, 
    'Jetta': {'km': 56000, 'ano': 2011}, 
    'Passat': {'km': 62000, 'ano': 1999}
}
dados
def km_media(dataset, ano_atual):
    result = {}
    for item in dataset.items():
        media = item[1]['km'] / (ano_atual - item[1]['ano'])
        item[1].update({ 'km_media': media })
        result.update({ item[0]: item[1] })

    return result
import pandas as pd
carros = pd.DataFrame(km_media(dados, 2019)).T
1 resposta

Olá Alba.

Na verdade a ordem na imagem está trocada mesmo e vamos fazer a correção.

Já que o DataFrame vai criar suas colunas e linhas na ordem que elas aparecerem no dictionary, como descrito na documentação (link), no caso:

{'Crossfox': {'km': 35000, 'ano': 2005, 'km_media': 2500.0}, 'DS5': {'km': 17000, 'ano': 2015, 'km_media': 4250.0}, 'Fusca': {'km': 130000, 'ano': 1979, 'km_media': 3250.0}, 'Jetta': {'km': 56000, 'ano': 2011, 'km_media': 7000.0}, 'Passat': {'km': 62000, 'ano': 1999, 'km_media': 3100.0}}

Deixando as linhas na ordem km, ano, km_media como abaixo:

          Crossfox      DS5     Fusca    Jetta   Passat
km         35000.0  17000.0  130000.0  56000.0  62000.0
ano         2005.0   2015.0    1979.0   2011.0   1999.0
km_media    2500.0   4250.0    3250.0   7000.0   3100.0

E quando transposta:

                km     ano  km_media
Crossfox   35000.0  2005.0    2500.0
DS5        17000.0  2015.0    4250.0
Fusca     130000.0  1979.0    3250.0
Jetta      56000.0  2011.0    7000.0
Passat     62000.0  1999.0    3100.0

Para deixar o resultado como o da imagem da aula poderíamos trocar a ordem das colunas passando uma list com a ordem das colunas ano, km e km_media como abaixo:

carros = carros[['ano','km','km_media']]

E dessa maneira nosso DataFrame vai ficar dessa maneira:

             ano        km  km_media
Crossfox  2005.0   35000.0    2500.0
DS5       2015.0   17000.0    4250.0
Fusca     1979.0  130000.0    3250.0
Jetta     2011.0   56000.0    7000.0
Passat    1999.0   62000.0    3100.0

Espero ter ajudado, qualquer duvida não hesite em perguntar.

Bons estudos :)