2016-11-21 5 views
2

Gibt es eine Möglichkeit, eine formatierte Spalte in einem Pandas DataFrame hinzuzufügen, wenn Sie damit in IPython-Notebooks arbeiten? Ich möchte eine Daten-URL hinzufügen und es in der Zelle anzeigen lassen.HTML-Formatierung in Pandas DataFrame

+0

Wrap up Und Sie wollen das Bild in der Zelle angezeigt werden? –

+0

Korrekt ............ –

+0

Brauchen wir wirklich so viele "...." :)? –

Antwort

2

Wenn Ihr src Urls sind zu lang, werden Pandas sie abschneiden, wenn sie angezeigt werden. Sie müssen die maximale Spaltenbreite erhöhen, um dies zu berücksichtigen.

Verfolgen Sie die aktuelle max Spaltenbreite

current_max_colwidth = pd.get_option('display.max_colwidth') 
print(current_max_colwidth) 

50 

Stellen Sie die Option, um etwas Großes

pd.set_option('display.max_colwidth', 1000) 

Import HTML Anzeigefunktion

from IPython.display import HTML 

verwenden, um den Datenrahmen to_html mit dem Parameter escape=False

HTML(
    pd.DataFrame([ 
      """<img src="http://stackoverflow.com/users/flair/2336654.png?theme=default">""", 
      """<img src="http://stackoverflow.com/users/flair/2543372.png?theme=default">""", 
      """<img src="http://stackoverflow.com/users/flair/44330.png?theme=default">""" 
     ]).to_html(escape=False)) 

enter image description here

Set Option zurück

pd.set_option('display.max_colwidth', current_max_colwidth) 

es in einer ordentlichen Funktion

def my_to_html(df): 
    current_max_colwidth = pd.get_option('display.max_colwidth') 
    pd.set_option('display.max_colwidth', 1000) 
    from IPython.display import HTML 
    my_html = HTML(df.to_html(escape=False)) 
    pd.set_option('display.max_colwidth', current_max_colwidth) 
    return my_html 

df = pd.DataFrame([ 
     """<img src="http://stackoverflow.com/users/flair/2336654.png?theme=default">""", 
     """<img src="http://stackoverflow.com/users/flair/2543372.png?theme=default">""", 
     """<img src="http://stackoverflow.com/users/flair/44330.png?theme=default">""" 
    ]) 

my_to_html(df) 
+0

gibt es eine Möglichkeit, dies zu tun, ohne 'HTML (df.to_html (escape = False)) aufrufen' '? Kann der Datenrahmen das selbst machen? –

+0

Ich konnte keine Option dafür finden. Ich fand einen, der Latex nicht entkommen konnte ... das tut uns nicht gut. Sie könnten die 'to_html'-Methode für diesen Datenrahmen überschreiben, aber das ist ziemlich hacky. Ich habe den Beitrag mit einer Funktion aktualisiert, die es tun wird. – piRSquared

+0

danke! Es ist wirklich schwer, all diese Informationen zu finden, wenn Sie nicht so vertraut mit Bibliotheken sind ... –

1

Hier ist ein Beispiel:

from IPython.display import HTML 
df = pd.DataFrame({'A': np.linspace(1, 10, 10)}) 
# this file is in the same folder as the notebook I'm using on my drive 
df['image'] = 'so-logo.png' 
df['new'] = df['image'].apply(lambda x: '<img src="{}"/>'.format(x) if x else '') 
HTML(df.to_html(escape=False)) 

Simple result


Alternativ können Sie df.style statt IPython.display.HTML verwenden. Auf diese Weise können Sie auch andere Formatierungen hinzufügen, zum Beispiel die Zeile auf schweben markieren:

from IPython.display import HTML 
df = pd.DataFrame({'A': np.linspace(1, 10, 10)}) 
df['image'] = 'so-logo.png' 
df['new'] = df['image'].apply(lambda x: '<img src="{}"/>'.format(x) if x else '') 


def hover(hover_color="#ffff99"): 
    return dict(selector="tr:hover", 
       props=[("background-color", "%s" % hover_color)]) 

styles = [ 
    hover(), 
    dict(selector="th", props=[("font-size", "150%"), 
           ("text-align", "center")]), 
    dict(selector="caption", props=[("caption-side", "bottom")]) 
] 
html = (df.style.set_table_styles(styles) 
      .set_caption("Hover to highlight.")) 

html 

Ich habe meinen Cursor auf die zweite Zeile hier:

With hover