5
respostas

Está dando erro na hora de plotar o gráfico

Fiz tudo como a professora orientou, mas está dando erro.


TypeError                                 Traceback (most recent call last)
File /opt/conda/lib/python3.10/site-packages/pandas/core/groupby/groupby.py:1942, in GroupBy._agg_py_fallback(self, how, values, ndim, alt)
   1941 try:
-> 1942     res_values = self._grouper.agg_series(ser, alt, preserve_dtype=True)
   1943 except Exception as err:

File /opt/conda/lib/python3.10/site-packages/pandas/core/groupby/ops.py:864, in BaseGrouper.agg_series(self, obj, func, preserve_dtype)
    862     preserve_dtype = True
--> 864 result = self._aggregate_series_pure_python(obj, func)
    866 npvalues = lib.maybe_convert_objects(result, try_float=False)

File /opt/conda/lib/python3.10/site-packages/pandas/core/groupby/ops.py:885, in BaseGrouper._aggregate_series_pure_python(self, obj, func)
    884 for i, group in enumerate(splitter):
--> 885     res = func(group)
    886     res = extract_result(res)

File /opt/conda/lib/python3.10/site-packages/pandas/core/groupby/groupby.py:2454, in GroupBy.mean.<locals>.<lambda>(x)
   2451 else:
   2452     result = self._cython_agg_general(
   2453         "mean",
-> 2454         alt=lambda x: Series(x, copy=False).mean(numeric_only=numeric_only),
   2455         numeric_only=numeric_only,
   2456     )
   2457     return result.__finalize__(self.obj, method="groupby")

File /opt/conda/lib/python3.10/site-packages/pandas/core/series.py:6549, in Series.mean(self, axis, skipna, numeric_only, **kwargs)
   6541 @doc(make_doc("mean", ndim=1))
   6542 def mean(
   6543     self,
   (...)
   6547     **kwargs,
   6548 ):
-> 6549     return NDFrame.mean(self, axis, skipna, numeric_only, **kwargs)

File /opt/conda/lib/python3.10/site-packages/pandas/core/generic.py:12420, in NDFrame.mean(self, axis, skipna, numeric_only, **kwargs)
  12413 def mean(
  12414     self,
  12415     axis: Axis | None = 0,
   (...)
  12418     **kwargs,
  12419 ) -> Series | float:
> 12420     return self._stat_function(
  12421         "mean", nanops.nanmean, axis, skipna, numeric_only, **kwargs
  12422     )

File /opt/conda/lib/python3.10/site-packages/pandas/core/generic.py:12377, in NDFrame._stat_function(self, name, func, axis, skipna, numeric_only, **kwargs)
  12375 validate_bool_kwarg(skipna, "skipna", none_allowed=False)
> 12377 return self._reduce(
  12378     func, name=name, axis=axis, skipna=skipna, numeric_only=numeric_only
  12379 )

File /opt/conda/lib/python3.10/site-packages/pandas/core/series.py:6457, in Series._reduce(self, op, name, axis, skipna, numeric_only, filter_type, **kwds)
   6453     raise TypeError(
   6454         f"Series.{name} does not allow {kwd_name}={numeric_only} "
   6455         "with non-numeric dtypes."
   6456     )
-> 6457 return op(delegate, skipna=skipna, **kwds)

File /opt/conda/lib/python3.10/site-packages/pandas/core/nanops.py:147, in bottleneck_switch.__call__.<locals>.f(values, axis, skipna, **kwds)
    146 else:
--> 147     result = alt(values, axis=axis, skipna=skipna, **kwds)
    149 return result

File /opt/conda/lib/python3.10/site-packages/pandas/core/nanops.py:404, in _datetimelike_compat.<locals>.new_func(values, axis, skipna, mask, **kwargs)
    402     mask = isna(values)
--> 404 result = func(values, axis=axis, skipna=skipna, mask=mask, **kwargs)
    406 if datetimelike:

File /opt/conda/lib/python3.10/site-packages/pandas/core/nanops.py:720, in nanmean(values, axis, skipna, mask)
    719 the_sum = values.sum(axis, dtype=dtype_sum)
--> 720 the_sum = _ensure_numeric(the_sum)
    722 if axis is not None and getattr(the_sum, "ndim", False):

File /opt/conda/lib/python3.10/site-packages/pandas/core/nanops.py:1701, in _ensure_numeric(x)
   1699 if isinstance(x, str):
   1700     # GH#44008, GH#36703 avoid casting e.g. strings to numeric
-> 1701     raise TypeError(f"Could not convert string '{x}' to numeric")
   1702 try:

**TypeError: Could not convert string **

Pelo jeito, é porque tem valores que não são numéricos na coluna, aí não deixa plotar o gráfico. Mas não consigo arrumar. Como faço?

5 respostas

Oii, Melissa! Tudo bem?

Sinto muito que ocorreu esse bug em seu código, vamos resolver!

Quando o desconectamos o nosso notebook por algum motivo, seja repentino ou por vontade, nosso ambiente de execução "desliga" todas as células contendo os códigos. Ao abrir e voltar no ponto que paramos, podemos receber alguns erros, pois os códigos anteriores estão "desligados" e acaba não gerando a conexão necessária para dar continuidade.

Como sugestão, recomendo que vá no menu superior e clique na aba Ambiente de execução, depois em Reiniciar e executar tudo para conectar o seu notebook e rodar os códigos.

Tela do Google Colab mostrando a opção "Reiniciar sessão e executar tudo dentro da aba Ambiente de execução"

Resultado:

Captura de tela do notebook no colab com o código de plotagem de gráfico usando o metodo groupby para agrupar os valores e o tipo.plot para plotagem do gráfico

E é importante também, verificar se os códigos não possuem erros, você pode comparar o seu código com o que foi disponibilizado pela instrutora no repositório do github.

Espero que dê certo! Qualquer dúvida, não hesite em recorrer ao fórum.

Bons estudos, Melissa!

Fiz conforme ensinado acima, mas continua dando erro:

1489 try: -> 1490 result = self.grouper._cython_operation( 1491 "aggregate",

25 frames NotImplementedError: function is not implemented for this dtype: [how->mean,dtype->object]

During handling of the above exception, another exception occurred:

ValueError Traceback (most recent call last) ValueError: could not convert string to float: 'CentroHigienópolisVista AlegreCachambiCentroGrajaúLins de VasconcelosCopacabanaCopacabanaFreguesia (Jacarepaguá)Barra da TijucaTijucaOlariaTijucaIpanemaTijucaBarra da TijucaBotafogoCopacabanaCopacabanaRecreio dos BandeirantesLeblonJardim OceânicoBarra da TijucaCopacabanaBarra da TijucaRecreio dos BandeirantesRecreio dos BandeirantesBarra da TijucaHumaitáRecreio dos BandeirantesCentroIpanemaIpanemaRecreio dos BandeirantesBarra da TijucaPenínsulaIpanemaMéierVargem PequenaBotafogoMaracanãRecreio dos BandeirantesJacarepaguáIpanemaIpanemaJardim BotânicoBarra da TijucaCachambiLeblonBarra da TijucaBarra da TijucaVila ValqueireGáveaBarra da TijucaCentroCosme VelhoBonsucessoBarra da TijucaTodos os SantosLaranjeirasJacarepaguáIpanemaBarra da TijucaItanhangáRecreio dos BandeirantesHumaitáBarra da TijucaPraça SecaTijucaTijucaFreguesia (Jacarepaguá)IpanemaOlariaBotafogoBotafogoLagoaLeblonCopacabanaIpanemaBarra da TijucaCateteJardim CariocaLeblonCateteRecreio dos BandeirantesPraça SecaVila IsabelCopacabanaLagoaFreguesia (Jacarepaguá)Barra da TijucaGáveaCopacabanaBarra da TijucaBotafogoBarra da TijucaRocha MirandaRecreio dos BandeirantesIpanemaLeblonRecreio dos BandeirantesBarra da TijucaTaquaraBotafogoIpanemaMéierFreguesia (Jacarepaguá)LagoaCopacabanaTijucaBotafogoBarra da TijucaIpanemaCopacabanaBarra da TijucaEngenho NovoBarra da TijucaLeblonBotafogoFreguesia (Jacarepaguá)Barra da TijucaCampo GrandeFlamengoEngenho de DentroCopa...

During handling of the above exception, another exception occurred:

ValueError Traceback (most recent call last) ValueError: complex() arg is a malformed string

The above exception was the direct cause of the following exception:

TypeError Traceback (most recent call last) /usr/local/lib/python3.10/dist-packages/pandas/core/nanops.py in _ensure_numeric(x) 1697 except ValueError as err: 1698 # e.g. "foo" -> 1699 raise TypeError(f"Could not convert {x} to numeric") from err 1700 return x 1701

TypeError: Could not convert CentroHigienópolisVista AlegreCachambiCentroGrajaúLins de VasconcelosCopacabanaCopacabanaFreguesia (Jacarepaguá)Barra da TijucaTijucaOlariaTijucaIpanemaTijucaBarra da TijucaBotafogoCopacabanaCopacabanaRecreio dos BandeirantesLeblonJardim OceânicoBarra da TijucaCopacabanaBarra da TijucaRecreio dos BandeirantesRecreio dos BandeirantesBarra da TijucaHumaitáRecreio dos BandeirantesCentroIpanemaIpanemaRecreio dos BandeirantesBarra da TijucaPenínsulaIpanemaMéierVargem PequenaBotafogoMaracanãRecreio dos BandeirantesJacarepaguáIpanemaIpanemaJardim BotânicoBarra da TijucaCachambiLeblonBarra da TijucaBarra da TijucaVila ValqueireGáveaBarra da TijucaCentroCosme VelhoBonsucessoBarra da TijucaTodos os SantosLaranjeirasJacarepaguáIpanemaBarra da TijucaItanhangáRecreio dos BandeirantesHumaitáBarra da TijucaPraça SecaTijucaTijucaFreguesia (Jacarepaguá)IpanemaOlariaBotafogoBotafogoLagoaLeblonCopacabanaIpanemaBarra da TijucaCateteJardim CariocaLeblonCateteRecreio dos BandeirantesPraça SecaVila IsabelCopacabanaLagoaFreguesia (Jacarepaguá)Barra da TijucaGáveaCopacabanaBarra da TijucaBotafogoBarra da TijucaRocha MirandaRecreio dos BandeirantesIpanemaLeblonRecreio dos BandeirantesBarra da TijucaTaquaraBotafogoIpanemaMéierFreguesia (Jacarepaguá)LagoaCopacabanaTijucaBotafogoBarra da TijucaIpanemaCopacabanaBarra da TijucaEngenho NovoBarra da TijucaLeblonBotafogoFreguesia (Jacarepaguá)Barra da TijucaCampo GrandeFlamengoEngenho de DentroCopacabanaIpanemaCopaca...

Oii, Kaian! Tudo bem?

Esse erro geralmente ocorre quando há uma tentativa de converter uma string para um tipo numérico, como float, mas a string contém caracteres que não podem ser interpretados como números.

Para te ajudar mais assertivamente e personalizada, abra um novo tópico no fórum para compartilhar o seu notebook contendo o seu código. Para compartilhar o seu projeto siga os passos abaixo:

  • No menu superior, no lado direito, clique em "Compartilhar".

Menu do colab,. Há dois botões "Comentário' e ' Compartilhar', está destacado em vermelho a o botão Compartilhar

  • Em seguida, em acesso geral, clique no modo leitor.

Captura de tela do colab. Há um texto 'Acesso Geral', abaixo há um texto 'qualquer pessoa com o link' . Ao alado está destacado em vermelho a opção leitor

Agora basta copiar o link e colar aqui como resposta ao tópico. Dessa forma, nós Monitores podemos te ajudar com base em seu projeto.

Abraço!

Oii, Kaian!

Obrigada por retornar!

Pude perceber que o seu código que a função mean() está tentando calcular a média de valores da coluna Tipo que não é numérica. Ela precisa ser usada com na coluna Valores que é do tipo numérico.

Seu código:

df_preco_tipo = dados.groupby('Tipo').mean()[['Valor']].sort_values('Valor')

O código correto seria:

df_preco_tipo = dados.groupby('Tipo')[['Valor']].mean().sort_values('Valor')

Código completo para plotagem:

df_preco_tipo = dados.groupby('Tipo')[['Valor']].mean().sort_values('Valor')

df_preco_tipo.plot(kind='barh', figsize=(14, 10), color ='purple');

Realize as mudanças, rode o código e observe se funciona como esperado.

Abraço!