JS dataTables из pandas

Я хочу использовать pandas dataFrames с dataTables. Я не могу понять, как инициализировать таблицу без id.

Есть ли способ установить id в теге таблицы, когда я вызываю df.to_html()?

Ответ 1

Вы можете попробовать следующее:

df.to_html(classes = 'my_class" id = "my_id')

Это похоже на SQL-инъекцию в основном.
Pandas 'to_html функция использует двойные кавычки вокруг класса. Вы можете использовать одинарные кавычки для определения аргумента классов и поместить в них двойные кавычки для завершения класса pandas '. Затем добавьте двойные кавычки вокруг имени вашего имени, но пусть pandas 'закрывает эти двойные кавычки для вас. Выход будет следующим:

'<table border="1" class="dataframe my_class" id = "my_id">...'

Надеюсь, что это поможет.

Ответ 2

Я не думаю, что это поведение доступно в to_html, но один способ - просто вставить его вручную:

In [11]: df = pd.DataFrame([1])

In [12]: s = df.to_html()

In [13]: print (s[:7] + 'id="my_dfs_id" ' + s[7:])
<table id="my_df_id" border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>0</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>0</strong></td>
      <td> 1</td>
    </tr>
  </tbody>
</table>

Вы можете поместить это поведение в функцию:

def df_to_html_with_id(df, id):
    s = df.to_html()
    return s[:7] + 'id="%s" ' % id + s[7:]

Пример использования: df_to_html_with_id(df, "hello").

Ответ 3

Хотя принятый ответ работает удивительно, вот что я сделал для применения id, а также некоторых классов для заголовка таблиц.

html = df.to_html().replace('<table','<table class="tableBoot" id="myTable"')

Это работает, потому что to_html просто возвращает строку, и мы можем использовать метод замены python для строковых объектов, чтобы заменить любую часть чем-нибудь еще (обратите внимание, что я использовал только открытие '<'). Я использовал это, чтобы включить стили в <thead> т.е. раздел заголовков таблицы!

Ответ 4

Я принял несколько разный подход и решил инициализировать класс CSS, который имел то преимущество, что все таблицы pandas стали DataTables. Вы можете добавить еще один класс, если хотите более четкое управление с различными параметрами

$(document).ready(function(){
    $('.dataframe').DataTable();
});