2013-11-17 5 views
21

Я хотел бы вставить ссылку (на веб-страницу) внутри таблицы pandas, поэтому, когда она отображается в ноутбуке ipython, я могу нажать ссылку.Вставьте ссылку внутри таблицы pandas

Я попытался следующие:

In [1]: import pandas as pd 

In [2]: df = pd.DataFrame(range(5), columns=['a']) 

In [3]: df['b'] = df['a'].apply(lambda x: 'http://example.com/{0}'.format(x)) 

In [4]: df 
Out[4]: 
    a      b 
0 0 http://example.com/0 
1 1 http://example.com/1 
2 2 http://example.com/2 
3 3 http://example.com/3 
4 4 http://example.com/4 

но URL только отображается в виде текста.

Я также попытался с помощью IPython объекта HTML:

In [5]: from IPython.display import HTML 

In [6]: df['b'] = df['a'].apply(lambda x:HTML('http://example.com/{0}'.format(x))) 

In [7]: df 
Out[7]: 
    a             b 
0 0 <IPython.core.display.HTML object at 0x0481E530> 
1 1 <IPython.core.display.HTML object at 0x0481E770> 
2 2 <IPython.core.display.HTML object at 0x0481E7B0> 
3 3 <IPython.core.display.HTML object at 0x0481E810> 
4 4 <IPython.core.display.HTML object at 0x0481EA70> 

, но он будет отображать только Repr объекта.

Любые другие идеи?

EDIT: ALKO получил правильный ответ, просто хотел бы добавить, что ширина ячейки ограничена по умолчанию, и длинный HTML код будет обрезан, то есть:

<a href="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0">xxx</a> 

станет это:

<a href="aaaaaaaaaaaaaaaaaaaaaa... 

и будет отображаться неправильно. (даже если текст ххх коротка и может поместиться в клетке)

Я обошел его, установив:

pd.set_printoptions(max_colwidth=-1) 

ответ

30

Я полагаю, вы должны представлять весь объект панд в html object, то есть

In [1]: from IPython.display import HTML 

In [2]: df = pd.DataFrame(list(range(5)), columns=['a']) 

In [3]: df['a'] = df['a'].apply(lambda x: '<a href="http://example.com/{0}">link</a>'.format(x)) 

In [4]: HTML(df.to_html(escape=False)) 

Извините, теперь у меня нет IPython и не удается проверить, правильно ли вывод.

+0

Я могу подтвердить, что он работает (с использованием anconda 4.2.0)! Спасибо @alko. – Tarrasch

+3

Я заметил, что для нескольких длинных URL-адресов панды «молча» сокращают html, чтобы в ячейках отображалось «пустое». Вот решение: http://stackoverflow.com/q/26277757/621449 – Tarrasch

+0

Этот метод усекает любую ссылку длиннее 35 символов, что означает, что рендеринг ссылок не работает ... любая идея, как обойти это/ –

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