【问题标题】:Pandas make a column clickable and sortPandas 使列可点击和排序
【发布时间】:2020-06-16 18:28:46
【问题描述】:

我关注了这篇帖子How to create a table with clickable hyperlink in pandas & Jupyter Notebook 在数据框中创建了一个可点击的链接。但是,似乎任何时候我对数据框进行排序,超链接都会消失。

df = pd.DataFrame(['http://google.com', 'http://duckduckgo.com'], columns=["a"])

def make_clickable(val):
    return '<a href="{}">{}</a>'.format(val,val)

df.style.format(make_clickable)

这将显示不可点击的链接:

df.sort_values(by="a")

【问题讨论】:

  • df.style.format(make_clickable) 确实在我的笔记本上输出了正确的(可点击的)链接。也许您错过了捕获输出? df = df.style.format(make_clickable)?

标签: python pandas clickable


【解决方案1】:

我以前从未使用过样式,所以我可能错了。根据我在Styling documentation 中可以找到的内容,样式并不意味着定义DataFrame 的默认HTML 表示。使用样式的预期方法是每次您需要应用给定的格式选项时调用DataFrame.style.format(),在您的情况下是:

df.sort_values(by='a').style.format({'a': make_clickable})

根据您的问题,我猜您希望在仅将 DataFrame 作为单元格的最后一行时强制给定列始终以给定方式显示。以下是您可以尝试的两种解决方案。

解决方案 1

我们可以为此定义一个快捷方式,如果我们需要更复杂的格式化策略,它会特别方便:

def clickable_links(df):
    return df.style.format({'a': make_clickable})

那么简单:

clickable_links(df.sort_values(by='a'))

解决方案 2

另一个可行的解决方案(只是为了好玩)将自动使所有数据帧的所有链接(名称为 'a' 的列)都可点击:

def format_all_html_repr(format_options):
    pd.DataFrame._repr_html_ = lambda self: self.style.format(format_options).render()

format_all_html_repr({'a': make_clickable})

df = pd.DataFrame(['http://google.com', 'http://duckduckgo.com'], columns=['a'])

那么我们不需要像解决方案 1 中那样明确:

df.sort_values(by='a')

第二种解决方案的缺点是每个 DataFrame 现在都将a 列格式化为其 HTML 输出中的链接。

解决方案 2 的详细信息

此解决方案的想法是修改默认情况下 HTML 的呈现方式。在您的笔记本中,每次单元格以 DataFrame df 结尾时,它都会自动调用 df._repr_html_。我们可以使用它来修改默认行为。一种方法是简单地将函数pandas.DataFrame._repr_html_ 绑定到我们喜欢的函数。

您不能通过直接为给定实例绑定方法 df._repr_html_ 来真正为单个 DataFrame 定义此行为,因为此修改不会传递给后代 DataFrame。换句话说,df._repr_htmldf.sort_values(by='a')._repr_html 不同,因为dfdf.sort_values(by='a') 是DataFrame 的两个不同实例。他们不分享他们的方法。

也许可以通过在切片/排序/或对df 应用任何转换时复制方法来找到中间立场,但这可能会更复杂一些。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    相关资源
    最近更新 更多