結論
次のようにして、指定した列をクリックできるリンクとして表示することができます。
df = pd.DataFrame({'name': ['google', 'pandas'], 'url':['https://www.google.com/?hl=ja', 'https://pandas.pydata.org/']})
def make_clickable(val):
return '<a href="{}" target="_blank">{}</a>'.format(val,val)
df.style.format(formatter={'url': make_clickable})
詳細
Colabなどnotebook環境で、URLを含むDataFrameを表示しようとすると、以下のようになると思います。
できればこのURLをクリックして開けるようにしたいです。
stackoverflowに回答がありました。
次のコードは、上のstackoverflowからの引用です。
df = pd.DataFrame(['http://google.com', 'http://duckduckgo.com'])
def make_clickable(val):
return '<a href="{}">{}</a>'.format(val,val)
df.style.format(make_clickable)
このコードを実行すると、次のように表示されます。
クリックできるように見えますが、Colab上ではクリックしても反応しませんでした。(httpのせい?)
httpをhttpsに修正すると、クリックできるようになりましたが、出力セル内でページを開いてしまいました。
新しいタブでページを開く
そこで、関数make_clickableで返しているaタグにtarget="_blank"
の属性を追加してあげます。
これで新しいタブでページを開くことができます。
def make_clickable(val):
return '<a href="{}" target="_blank">{}</a>'.format(val,val)
列を指定する
次の例は複数の列を持つDataFrameの場合です。
同じ方法では、全ての列がクリックできるようになってしまいます。
適用したい列はDataFrame.style.formatの引数formatterで指定できます。
辞書形式で列と関数を指定します。
df.style.format(formatter={'url': make_clickable})
おわりに
DataFrame.style.formatでフォーマットを指定すると、デフォルトのフォーマットが崩れてしまうため、ここまでの例のように見た目が変わってしまいます。
必要に応じて、以下のドキュメントを参考にフォーマットを調整することができます。
また、今回の内容をまとめたColabを参考として添付しておきます。