2013-04-15 7 views
10

pandas fornisce un utile to_html() per convertire lo DataFrame nello html table. C'è qualche funzione utile per leggerlo allo DataFrame?Come convertire una tabella html in dataframe panda

+1

Credo di no, ma non dovrebbe essere troppo difficile, con un piccolo aiuto da 'lxml' ... – root

+1

Inoltre, la conversione a' html' è lossy, come le informazioni sul tipo sono perse, quindi è necessario specificarlo da soli. Ad ogni modo se 'df' è relativamente semplice (per esempio tipi di dati uniformi) la conversione dovrebbe richiedere solo poche righe di codice. – root

+0

panda ha alcuni metodi di inferenza di tipo che tentano di alleviare questo problema e fanno un buon lavoro. –

risposta

3

Nel caso generale non è possibile, ma se si circa conoscere la struttura della tabella è possibile qualcosa di simile:

# 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 

Ora analizzare il codice HTML e ricostruire:

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 

È potrebbe estenderlo per Multiindex dfs o rilevamento automatico del tipo usando eval() se necessario.