Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dados não compativéis com o original HTML

Saudações

Estava testando o que foi mostrado na aula e procurei em uma página na wikipédia sobre Dados climatológicos da minha cidade. Fiz o passo a passo mostrado na aula. Inspecionei a página, procurei e identifiquei a tabela que queria importar para o Colab.

Tabela escolhida

E aqui seque o meu código para importar a tabela. Fiz exatamento como mostrada na aula, o upload para o Calab bem como o caminho atribuído para a variável tabelas_wiki.

Código para importar tabela

E parte do retono para esse código segue abaixo:

O que achei interessante, pois na página com os dados alguns números tem vírgulas. O que não aconteceu com os número na tabela utilizando o pandas. Ai pensei em salvar o aquivo como .csv e ver se obtinha o mesmo resultado. Segue o código com o respectivo retorno:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

A não compatibilização continua, os número no colab continuam sem vígurla. E o que foi mais estranho é que somente dois números apararecem exatamente como na tabela original, na última coluna, os números das linhas com índices 5 e 8.

E aqui fica a minha dúvida. Existe algum tratamento que possa fazer para que alguns dados em formato .html possam ser importados para o Colab sem esse erro? E porque somente dois números mantiveram o formato original?

2 respostas
solução!

Oi, Paulo! Como você está?

Que ótima ideia você teve em investigar os dados climáticos da sua cidade! Vou me inspirar em você para analisar o clima da minha cidade, também :)

Essa diferença que você encontrou nos dados se deve ao fato de que o comando read_html do pandas interpreta todos os números como strings e ignora as vírgulas como separador decimal. É possível tratar os dados antes de transformá-los em dataframe para que os separadores possam ser mantidos. É super comum precisarmos de diferentes abordagens dependendo das peculiaridades dos dados com os quais estamos lidando.

Para isso, vamos importar outra biblioteca, a Beautiful Soup. Essa é uma biblioteca especializada em analisar dados de páginas HTML.

from bs4 import BeautifulSoup

Então, abra o código HTML da página que está salva em seu computador. Vamos colar o código inteiro em uma variável:

conteudo_html = """
Cole o código HTML aqui
"""

Agora, vamos percorrer o código, buscar a tabela e fazer as transformações necessárias:

# Parseando o HTML com BeautifulSoup
soup = BeautifulSoup(conteudo_html, 'html.parser')

# Encontrando a tabela desejada
table = soup.find('table')

# Convertendo a tabela HTML para DataFrame
df = pd.read_html(str(table), decimal=',', thousands='.', header=[0, 1], index_col=0)[0]

# Exibindo o DataFrame resultante
df

A partir desse dataframe resultante, você pode continuar a tratar e analisar os dados climáticos de Teresina. Espero que consiga bons insights!

Se tiver mais alguma dúvida, estou por aqui.

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Oi, Paulo!

Ótimo questionamento! Sim, é possível usar parâmetros adicionais para manter o formato da tabela original!

Eu testei aqui a tabela com os dados de temperatura de Teresina, e foi possível ler da mesma forma que está no Wikipédia da seguinte forma:

dados_html = pd.read_html('https://pt.wikipedia.org/wiki/Teresina', thousands='.')[5]

O parâmetro thousands na função read_html é usado para especificar o caractere a ser usado como separador de milhares. O valor padrão é None, o que significa que nenhum separador de milhares é considerado.

Ao usar thousands='.', você está indicando que o ponto (.) é o separador de milhares. Isso é necessário porque, em alguns países, o ponto é usado como separador de milhares, enquanto em outros, a vírgula é utilizada.

Então, qando você não especifica thousands e há vírgulas nos números, a biblioteca pandas interpreta as vírgulas como separadores de milhares e as remove, deixando apenas os números inteiros. Ao especificar thousands='.', você está dizendo ao pandas para tratar o ponto como o separador de milhares e, portanto, as vírgulas nos números são preservadas.

Espero que isso te ajude!

Qualquer outra dúvida, não hesite em chamar!