Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como converter uma variavel string/object? Já tentei varias vezes, até em outras versões do Pandas, OSs...

##Como somar por tipo?

import pandas as pd
import numpy as np
lista={"Descricao":["Yamaha Crosser 150 Z ABS","Yamaha Lander 250 ABS 2020","Nissan Frontier"],
      "Preço":["12.790,00","16.990,00","137.550,00"],
      "Tipo":["Motocicleta e assemelhados","Motocicleta e assemelhados","Picape"]
      }
dados=pd.DataFrame(lista)
dados
total_veiculos=dados["Preço"].sum()
total_veiculos
motos=dados[dados["Tipo"]=="Motocicleta e assemelhados"]
motos.head()
dados.info()

subtotal_motos=sum(motos["Preço"])
##Saida:TypeError: unsupported operand type(s) for +: 'int' and 'str'

subtotal_motos=sum(motos["Preço"].astype("int64"))
##Saída: ValueError: invalid literal for long() with base 10: '12.790,00'

##Já tentei
#dic_types={"Descricao":"str",
#          "Preço":"int64",
#          "Tipo":"str"
#          }
#dados= dados.astype(dic_types)
#dados=pd.DataFrame(data=lista,dtype=dic_types,thousands=".")
#subtotal_motos=sum(motos["Preço"].astype("int64"))
1 resposta
solução!

Olá Alberto,

O problema da conversão está no formato do preço, o python não faz a conversão de string para int ou float caso tenha uma vírgula como acontece nos preços do código. Para fazer essa conversão existem algumas possibilidades:

1- Alterar o formato do preço na criação da lista:

import pandas as pd
import numpy as np

lista={"Descricao":["Yamaha Crosser 150 Z ABS","Yamaha Lander 250 ABS 2020","Nissan Frontier"],
      "Preço":["12790.00","16990.00","137550.00"],
      "Tipo":["Motocicleta e assemelhados","Motocicleta e assemelhados","Picape"]
      }

dados=pd.DataFrame(lista)
motos=dados[dados["Tipo"]=="Motocicleta e assemelhados"]

subtotal_motos=sum(motos["Preço"].astype("float"))

2- Ou formatar durante a execução do código:

import pandas as pd
import numpy as np

lista = {"Descricao": ["Yamaha Crosser 150 Z ABS", "Yamaha Lander 250 ABS 2020", "Nissan Frontier"],
         "Preço": ["12.790,00", "16.990,00", "137.550,00"],
         "Tipo": ["Motocicleta e assemelhados", "Motocicleta e assemelhados", "Picape"]
         }

dados = pd.DataFrame(lista)
motos = dados[dados["Tipo"] == "Motocicleta e assemelhados"]

subtotal_motos = sum(
    motos["Preço"].str.replace('.', '').str.replace(',', '.').astype("float")
)

Como é dinheiro recomendo converter para float (.astype("float")), e por isso mudei a posição do ponto também.

Qualquer dúvida pode perguntar!