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

Dúvida sobre o DataFrame usando o HTML

Fiz a leitura do arquivo dados_html_1.html usando o comando df_html = pd.read_html('dados/dados_html_1.html') , porém ele retorna como um list, ou seja, não aparecendo como data frame.



[  FAIXA ETÁRIA UNAFISCO SAÚDE SOFT II SOFT PARTICIPATIVO      UNIQUE
 0      00 A 18               R$218,99           R$192,60    R$334,48
 1      19 A 23               R$263,63           R$207,67    R$380,06
 2      24 A 28               R$322,44           R$224,26    R$464,39
 3      29 A 33               R$402,05           R$258,63    R$566,68
 4      34 A 38               R$455,17           R$306,37    R$664,61
 5      39 A 43               R$489,29           R$417,93    R$742,72
 6      44 A 48               R$582,65           R$495,24    R$869,47
 7      49 A 53               R$718,86           R$562,64  R$1.046,29
 8      54 A 58               R$908,54           R$721,00  R$1.355,74
 9   59 OU MAIS             R$1.244,50         R$1.151,62  R$2.003,53]

Tentei usar DataFrame(df_html), entretanto também não funcionou:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-16-0a186cd0dc2f> in <module>
----> 1 pd.DataFrame(df_html)

~\anaconda3\envs\alura_pandas\lib\site-packages\pandas\core\frame.py in __init__(self, data, index, columns, dtype, copy)
    521                     mgr = arrays_to_mgr(arrays, columns, index, columns, dtype=dtype)
    522                 else:
--> 523                     mgr = init_ndarray(data, index, columns, dtype=dtype, copy=copy)
    524             else:
    525                 mgr = init_dict({}, index, columns, dtype=dtype)

~\anaconda3\envs\alura_pandas\lib\site-packages\pandas\core\internals\construction.py in init_ndarray(values, index, columns, dtype, copy)
    188     # by definition an array here
    189     # the dtypes will be coerced to a single dtype
--> 190     values = _prep_ndarray(values, copy=copy)
    191 
    192     if dtype is not None:

~\anaconda3\envs\alura_pandas\lib\site-packages\pandas\core\internals\construction.py in _prep_ndarray(values, copy)
    322         values = values.reshape((values.shape[0], 1))
    323     elif values.ndim != 2:
--> 324         raise ValueError(f"Must pass 2-d input. shape={values.shape}")
    325 
    326     return values

ValueError: Must pass 2-d input. shape=(1, 10, 4)

Como faço para tranformar esse arquivo de list para data frame?

2 respostas
solução!

Olá Ricardo, tudo bem ? Espero que sim.

O read_html retorna uma lista de DataFrames, então mesmo que só tenha uma tabela no site que você buscou, o Pandas vai retornar uma lista com todos os DataFrames encontrados.

Então para extrair apenas o primeiro DataFrame podemos usar o slice, para a primeira posição ( [0] ).

O código final vai ficar assim:

df_html = pd.read_html('dados/dados_html_1.html')[0]

Assim vai garantir que vai salvar apenas o primeiro na variável df_html.

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

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

Oi Igor realmente, eu havia cometido erro ao esquecer de adicionar o índice [0]

muito obrigado