2013-04-15 6 views
10

pandas предоставляет полезный to_html() для преобразования DataFrame в html table. Есть ли полезная функция, чтобы прочитать ее обратно до DataFrame?Как преобразовать таблицу html в dataframe pandas

+1

Я думаю, что нет, но это не должно быть слишком трудно с небольшой помощью 'lxml' ... – root

+1

Кроме того, преобразование в' html' с потерями, так как информация типа теряется, поэтому вам нужно будет указать ее самостоятельно. В любом случае, если 'df' относительно прост (например, однородные типы данных), преобразование должно занимать всего несколько строк кода. – root

+0

У pandas есть некоторые методы вывода типа, которые пытаются смягчить эту проблему, и они выполняют довольно хорошую работу. –

ответ

3

В общем случае это не представляется возможным, но если вы приблизительно знаете структуру вашей таблицы вы могли бы что-то вроде этого:

# Create a test df: 
>>> df = DataFrame(np.random.rand(4,5), columns = list('abcde')) 
>>> df 
    a   b   c   d   e 
0 0.675006 0.230464 0.386991 0.422778 0.657711 
1 0.250519 0.184570 0.470301 0.811388 0.762004 
2 0.363777 0.715686 0.272506 0.124069 0.045023 
3 0.657702 0.783069 0.473232 0.592722 0.855030 

Теперь разобрать HTML и реконструировать:

from pyquery import PyQuery as pq 

d = pq(df.to_html()) 
columns = d('thead tr').eq(0).text().split() 
n_rows = len(d('tbody tr')) 
values = np.array(d('tbody tr td').text().split(), dtype=float).reshape(n_rows, len(columns)) 
>>> DataFrame(values, columns=columns) 

    a   b   c   d   e 
0 0.675006 0.230464 0.386991 0.422778 0.657711 
1 0.250519 0.184570 0.470301 0.811388 0.762004 
2 0.363777 0.715686 0.272506 0.124069 0.045023 
3 0.657702 0.783069 0.473232 0.592722 0.855030 

You может расширять его для обнаружения данных Multiindex dfs или автоматического типа с использованием eval(), если необходимо.

Смежные вопросы