2013-02-26 12 views
11

Voglio utilizzare panda datiFrames con dataTables. Non riesco a capire come inizializzare la tabella senza un ID.JS dataTables from panda

C'è un modo per impostare l'id nel tag table quando chiamo df.to_html()?

risposta

12

Si potrebbe provare questo:

df.to_html(classes = 'my_class" id = "my_id') 

E 'come uno SQL injection in fondo.
La funzione to_html di Pandas utilizza doppi apici attorno alla classe. È possibile utilizzare le virgolette singole per definire l'argomento delle classi e inserire le virgolette al loro interno per terminare la classe dei panda. Quindi metti le virgolette doppie sul nome del tuo ID, ma lascia che i panda chiudano quelle virgolette per te. L'output sarà il seguente:

'<table border="1" class="dataframe my_class" id = "my_id">...' 

Sperare che aiuti.

+0

Questo è un bel trucco! – Private

+0

A cosa mi riferisco la mia classe? o il mio ID? Sfortunatamente non conosco HTML o CSS. Stavo cercando di ottenere un output di qualcosa su un'e-mail di Outlook utilizzando Win32com ma non riesco a ottenere la formattazione da applicare. Non so come creare una classe personalizzata e questi stili non sembrano arrivare a Outlook correttamente. (df .style .format (per cento) .applymap (color_negative_red, sottoinsieme = [ 'CSAT', 'FCR']) .set_properties (** { 'font-size':, 'font '9pt' -famiglia ':' Calibri '}) .bar (sottoinsieme = [' total_hits ',' survey_count '], color =' lightblue ')) – trench

+0

Avrai bisogno di una conoscenza di base dell'HTML/CSS per cogliere appieno cosa "classe" e "id" significano. Fondamentalmente, le classi e gli ID sono modi convenienti per applicare la formattazione CSS solo a parti specifiche del tuo html. Prova questo per informazioni sulle classi http://www.w3schools.com/cssref/sel_class.asp Cerca qui la differenza tra classe e ID http://stackoverflow.com/questions/12889362/difference-between-id-and- class-in-css-and-when-use-it –

6

Non credo che questo comportamento è disponibile in to_html, ma un modo è quello di inserire solo in modo manuale:

In [11]: df = pd.DataFrame([1]) 

In [12]: s = df.to_html() 

In [13]: print (s[:7] + 'id="my_dfs_id" ' + s[7:]) 
<table id="my_df_id" border="1" class="dataframe"> 
    <thead> 
    <tr style="text-align: right;"> 
     <th></th> 
     <th>0</th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr> 
     <td><strong>0</strong></td> 
     <td> 1</td> 
    </tr> 
    </tbody> 
</table> 

Si potrebbe mettere questo comportamento in una funzione:

def df_to_html_with_id(df, id): 
    s = df.to_html() 
    return s[:7] + 'id="%s" ' % id + s[7:] 

Esempio di utilizzo: df_to_html_with_id(df, "hello").

2

Sebbene la risposta accettata funzioni in modo sorprendente, ecco cosa ho fatto per applicare id e anche alcune classi per la direzione dei tavoli.

html = df.to_html().replace('<table','<table class="tableBoot" id="myTable"') 

Questo funziona perché to_html solo restituisce una stringa e possiamo usare python modalità di oggetti stringa Sostituisci per sostituire qualsiasi parte con qualsiasi altra cosa (si noti che ho usato solo l'apertura '<'). Ho usato questo per includere gli stili a <thead> ie. sezione titoli del tavolo!

2

Ho seguito un approccio leggermente diverso e ho deciso di inizializzarlo in base alla classe CSS, con il vantaggio che tutte le tabelle panda diventavano DataTable. È possibile aggiungere un'altra classe se si desidera un controllo più raffinato con diverse opzioni

$(document).ready(function(){ 
    $('.dataframe').DataTable(); 
}); 
+0

significa che non hai più bisogno dell'ID e in qualche modo sa che qualsiasi pd.DataFrame.to_html è un oggetto dataframe? – tsando

+0

@tsando: Esattamente!Un piccolo inconveniente è che potresti aver bisogno di impostazioni diverse se hai molte tabelle sulla tua pagina, che puoi controllare con [classes paramater] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas. DataFrame.to_html.html) – citynorman