来自 pandas 的 JS 数据表

问题描述 投票:0回答:6

我想将 pandas dataFrames 与 dataTables 一起使用。我无法弄清楚如何在没有 id 的情况下初始化表。

有什么方法可以在调用

df.to_html()
时在table标签中设置id吗?

python datatables pandas
6个回答
19
投票

你可以试试这个:

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

基本上就像 SQL 注入。
Pandas 的 to_html 函数在类周围使用双引号。您可以使用单引号来定义类参数,并在其中添加双引号以结束 pandas 的类。然后在你的 id 名称两边加上左双引号,但让 pandas 为你关闭这些双引号。输出如下:

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

希望有帮助。


6
投票

我认为这种行为在

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
投票

我采取了稍微不同的方法,决定通过 CSS 类进行初始化,这样做的好处是所有 pandas 表都变成了 DataTable。如果您想要具有不同选项的更精细的控制,您可以添加另一个类

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

2
投票

虽然接受的答案效果惊人,但这就是我将 id 以及一些类应用于表格标题所做的事情。

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

这是有效的,因为 to_html 只是返回一个字符串,我们可以使用字符串对象的 python 替换方法将任何部分替换为其他内容(请注意,我只使用了开头的 '<'). I used this to include styles to

<thead>
,即表格的标题部分!


0
投票

pandas.to_html现在有一个参数

table_id
,可以用来直接设置表id。

import pandas as pd

df = pd.DataFrame({
    'A': [1, 2],
    'B': [3, 4]
})

s = df.to_html(table_id='my_df_id')
print(s)

s

<table border="1" class="dataframe" id="my_df_id">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>A</th>
      <th>B</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>1</td>
      <td>3</td>
    </tr>
    <tr>
      <th>1</th>
      <td>2</td>
      <td>4</td>
    </tr>
  </tbody>
</table>


0
投票

也许你可以尝试 在Python中: dt = [你的数据框].to_json(orient="split")

在js中: 使用 jquery 中的 DataTable

© www.soinside.com 2019 - 2024. All rights reserved.