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!