我想在pandas表中插入一个链接(到网页),所以当它在ipython notebook中显示时,我可以按链接。
我尝试了以下内容:
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
但是网址只显示为文字。
我也尝试过使用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。
还有其他想法吗?
编辑: alko得到了正确的答案,只是想补充说默认情况下单元格宽度是有限的,长html代码会被截断,即:
<a href="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0">xxx</a>
将成为这个:
<a href="aaaaaaaaaaaaaaaaaaaaaa...
并且无法正确显示。 (即使文本xxx很短并且可以放入单元格中)
我通过设置:
来绕过它pd.set_printoptions(max_colwidth=-1)
答案 0 :(得分:41)
我想你必须将整个pandas对象表示为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,无法检查输出是否正确。
答案 1 :(得分:5)
如果要避免缩短长网址的问题,还可以显示具有唯一值或标准值的链接,即
df['Url'] = '<a href=' + df['Url'] + '><div>' + df['Name'] + '</div></a>'
df = df.to_html(escape=False)
# OR
df['Url'] = '<a href=' + df['Url'] + '><div>'Hello World'</div></a>'
df = df.to_html(escape=False)
答案 2 :(得分:0)
安装pretty-html-table
from pretty_html_table import build_table
body = """
<html>
<head>
</head>
<body>
{0}
</body>
</html>
""".format(build_table(df, 'blue_light'))
您不必担心 DataFrame 中的格式和网站链接,输出将仅包含超链接。