pandas dataframe.to_html()上的分页

时间:2016-08-11 10:13:05

标签: python pandas

我有一个庞大的pandas数据帧我正在转换为html表,即dataframe.to_html(),它大约有1000行。任何使用分页的简单方法,这样我就不必滚动整行1000行。比如说,查看前50行然后单击下一步以查看后续的50行?

1 个答案:

答案 0 :(得分:5)

我能想到的最佳解决方案涉及几个外部JS库:JQuery及其DataTables plugin。只需很少的努力就可以实现分页,而不仅仅是分页。

让我们设置一些HTML,JS和python:

using (TransactionScope scope = new TransactionScope( TransactionScopeOption.RequiresNew, new System.TimeSpan( 0, 15, 0 ) ))
    {
      try
      {
        for (int i=0; i<10000; i++)
        {
          dataContext.CallSP( i );
        }
      }
      catch (Exception e)
      {
        log( e );
      }
      finally
      {
        scope.Complete();
      }
    }

现在我们可以加载一个样本数据集来测试它:

from tempfile import NamedTemporaryFile
import webbrowser

base_html = """
<!doctype html>
<html><head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.16/css/jquery.dataTables.css">
<script type="text/javascript" src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.js"></script>
</head><body>%s<script type="text/javascript">$(document).ready(function(){$('table').DataTable({
    "pageLength": 50
});});</script>
</body></html>
"""

def df_html(df):
    """HTML table with pagination and other goodies"""
    df_html = df.to_html()
    return base_html % df_html

def df_window(df):
    """Open dataframe in browser window using a temporary file"""
    with NamedTemporaryFile(delete=False, suffix='.html') as f:
        f.write(df_html(df))
    webbrowser.open(f.name)

美丽的结果: enter image description here

一些注意事项:

  • 请注意from sklearn.datasets import load_iris import pandas as pd iris = load_iris() df = pd.DataFrame(iris.data, columns=iris.feature_names) df_window(df) 字符串中的pageLength参数。这是我定义每页默认行数的地方。您可以在DataTable options page中找到其他可选参数。
  • 在{Jupyter Notebook'中测试了base_html函数,但也应该在普通的python中运行。
  • 您可以跳过df_window,只需将df_window的返回值写入HTML文件即可。