При попытке создать dataframe из данных html-страницы возникает ошибка ValueError: Must pass 2-d input

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_html('/content/экспорт-таблицы.html')

На выходе вместо датафрейма получаю список [729 rows x 9 columns]. Пробую сформировать датафрейм из списка и получаю ошибку.

df_ = pd.DataFrame(df)

ValueError                                Traceback (most recent call last)
<ipython-input-26-862464d19d34> in <cell line: 1>()
----> 1 df_ = pd.DataFrame(df)

2 frames
/usr/local/lib/python3.10/dist-packages/pandas/core/internals/construction.py in _prep_ndarraylike(values, copy)
    581         values = values.reshape((values.shape[0], 1))
    582     elif values.ndim != 2:
--> 583         raise ValueError(f"Must pass 2-d input. shape={values.shape}")
    584 
    585     return values

ValueError: Must pass 2-d input. shape=(1, 729, 9)

Ответы (1 шт):

Автор решения: CrazyElf

Судя по ошибке:

ValueError: Must pass 2-d input. shape=(1, 729, 9)
                                       ^^^^^^^^^^^

У вас в df список из 1 (одного) датафрейма размером (729, 9).
Вам просто нужно взять первый элемент списка датафреймов, который вернула функция pd.read_html.

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_html('/content/экспорт-таблицы.html')[0]
                                                  ^^^ вот тут

pd.read_html возвращает список датафреймов, потому что на странице может быть найдено много таблиц, и каждая таблица преобразуется в отдельный датафрейм, после чего возвращается список этих датафреймов.

→ Ссылка