Я никогда раньше не использовал стили, поэтому могу ошибаться. Согласно тому, что я могу найти в документации по стилю , стили не предназначены для определения представления 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'
), доступные для щелчка для всех DataFrames:
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_
к функции, которая нам нравится.
На самом деле вы не можете определить это поведение для одного DataFrame, привязав метод df._repr_html_
непосредственно к данному экземпляру, потому что это изменение не будет передано в дочерние DataFrames. Другими словами, df._repr_html
будет отличаться от df.sort_values(by='a')._repr_html
, потому что df
и df.sort_values(by='a')
- это два разных экземпляра DataFrame. Они не делятся своими методами.
Может быть, можно найти золотую середину, скопировав метод при нарезке / сортировке / или применив какое-либо преобразование к df
, но это, вероятно, будет немного сложнее написать.