2013-02-26 9 views
11

Ich möchte pandas dataFrames mit dataTables verwenden. Ich kann nicht herausfinden, wie ich die Tabelle ohne ID initialisiere.JS dataTables von Pandas

Gibt es eine Möglichkeit, die ID in der Tabelle Tag beim Aufruf von df.to_html() zu setzen?

Antwort

12

Sie konnten dieses versuchen:

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

Es ist wie eine SQL-Injection im Grunde.
Pandas to_html Funktion verwendet doppelte Anführungszeichen um die Klasse. Sie können einfache Anführungszeichen verwenden, um das Argument classes zu definieren und doppelte Anführungszeichen in sie einzufügen, um die Klasse der Pandas zu beenden. Dann öffne doppelte Anführungszeichen um deinen ID-Namen, aber lass Pandas diese doppelten Anführungszeichen für dich schließen. Die Ausgabe ist die folgende:

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

Hoffnung, die hilft.

+0

Das ist ein schöner Hack! – Private

+0

Worauf bezieht sich meine Klasse? oder meine ID? Ich kenne HTML oder CSS leider nicht. Ich habe versucht, eine Ausgabe von etwas zu einer Outlook-E-Mail mit Win32Com zu bekommen, aber ich kann keine Formatierung anwenden. Ich weiß nicht, wie ich eine benutzerdefinierte Klasse erstellen kann und diese .styles scheinen nicht korrekt in Outlook zu sein. (df .style .format (Prozent) .applymap (color_negative_red, Teilmenge = [ 'csat', 'fcr']) .set_properties (** { 'font-size': '9pt' font‘ 'family': 'Calibri'}) .bar (Teilmenge = ['total_hits', 'survey_count'], color = 'lightblue')) – trench

+0

Sie benötigen ein grundlegendes Verständnis von HTML/CSS, um alles zu verstehen "Klasse" und "ID" bedeuten. Grundsätzlich sind Klassen und IDs eine bequeme Möglichkeit, CSS-Formatierung nur auf bestimmte Teile Ihres HTML anzuwenden. Versuchen Sie dies für Informationen zu Klassen http://www.w3schools.com/cssref/sel_class.asp Suchen Sie hier nach dem Unterschied zwischen Klasse und ID http://stackoverflow.com/questions/12889362/difference-between-id-and- class-in-css-und-wann-zu-use-it –

6

Ich glaube nicht, dass dieses Verhalten in to_html verfügbar ist, aber eine Möglichkeit ist, einfach es steckte in Hand:

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> 

Sie dieses Verhalten in eine Funktion setzen könnte:

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

Beispielverwendung: df_to_html_with_id(df, "hello").

2

Obwohl die angenommene Antwort erstaunlich funktioniert, hier ist, was ich getan habe, ID und auch einige Klassen auf die Überschrift von Tabellen anzuwenden. Diese

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

funktioniert, weil to_html nur einen String zurückgibt, und wir können Python-Methode der String-Objekte verwenden, ersetzen mit irgendetwas anderem einen Teil zu ersetzen (beachten Sie, dass ich nur die Öffnung verwendet ‚<‘). Ich habe dies verwendet, um Stile zu <thead> dh zu umfassen. Überschriften Abschnitt der Tabelle!

2

Ich nahm einen etwas anderen Ansatz und beschloss, durch CSS-Klasse zu initialisieren, die den Vorteil hatte, dass alle Pandas-Tabellen zu DataTables wurden. Sie können eine weitere Klasse hinzufügen, wenn Sie eine differenziertere Steuerung mit verschiedenen Optionen wünschen.

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

bedeutet dies, dass Sie nicht mehr die ID und irgendwie weiß es eine pd.DataFrame.to_html ist ein Dataframe-Objekt? – tsando

+0

@tsando: Genau das!Ein kleiner Nachteil ist, dass Sie möglicherweise andere Einstellungen benötigen, wenn Sie viele Tabellen auf Ihrer Seite haben, die Sie mit dem Parameter [classes parameter] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas) steuern können. DataFrame.to_html.html) – citynorman