2016-11-21 5 views
2

Есть ли способ добавить форматированный столбец в Pandas DataFrame при работе с ним в ноутбуках IPython? Я хотел бы добавить URL-адрес данных <img> и показать его в ячейке.Форматирование HTML в Pandas DataFrame

+0

И вы хотите, чтобы изображение для отображения в ячейке? –

+0

Правильно ............ –

+0

Нам действительно нужно это много "...." :)? –

ответ

2

Если src URLs слишком long, pandas усекают их, когда он отображает его. Вам нужно увеличить максимальную ширину столбца, чтобы разместить это.

отслеживать текущую ширину макс колонке

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

50 

Установить опцию на что-то большое

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

импорта функции HTML дисплей

from IPython.display import HTML 

использовать dataframe to_html с параметром 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 вариант назад

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

Заверните в кругленькую функции

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

есть ли способ сделать это, не называя 'HTML (df.to_html (escape = False))'? может ли dataframe сделать это сам? –

+0

Я не мог найти для этого вариант. Я обнаружил, что не избежать «латекса» ... это не делает нам ничего хорошего. Вы можете перезаписать метод 'to_html' для этого фреймворка данных, но это довольно хаки. Я обновил сообщение с функцией, которая сделает это. – piRSquared

+0

спасибо! это очень сложно найти всю эту информацию, если вы не знакомы с библиотеками ... –

1

Вот пример:

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


В качестве альтернативы вы можете использовать df.style вместо IPython.display.HTML. Это также позволяет добавлять другое форматирование, например, чтобы выделить строку на парении:

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 

У меня есть курсор на второй строке здесь:

With hover

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