Insérer un lien dans une table pandas

Je voudrais insérer un lien (vers une page web) dans une table pandas, donc quand il est affiché dans IPython notebook, je pourrais appuyer sur le lien.

J'ai essayé ce qui suit:

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

Mais l'url est simplement affichée sous forme de texte.

J'ai aussi essayé d'utiliser l'objet HTML ipython:

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>

Mais il n'affichera que le repr de l'objet.

D'autres idées?

Modifier: alko a obtenu la bonne réponse, je voulais juste ajouter que la largeur de la cellule est limitée par défaut, et longue code html sera tronqué, c'est à dire:

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

Deviendra ceci:

<a href="aaaaaaaaaaaaaaaaaaaaaa...

Et ne sera pas affiché correctement. (même si le texte xxx est court et peut tenir dans la cellule)

Je l'ai contourné en définissant:

pd.set_printoptions(max_colwidth=-1)
24
demandé sur lev 2013-11-18 00:07:36

1 réponses

Je suppose que vous devez représenter l'objet pandas entier comme Objet html , c'est-à-dire

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))

Désolé, maintenant N'ont pas IPython à portée de main, et ne peut pas vérifier si la sortie est correcte.

36
répondu alko 2016-10-13 03:54:50