2016-08-11 15 views
6

Tôi có một khung dữ liệu gấu trúc khổng lồ Tôi đang chuyển đổi sang bảng html tức là dataframe.to_html(), khoảng 1000 hàng. Bất kỳ cách dễ dàng nào để sử dụng phân trang để tôi không phải cuộn toàn bộ 1000 hàng. Giả sử, xem 50 hàng đầu tiên sau đó nhấp vào bên cạnh để xem 50 hàng tiếp theo?Pagination on pandas dataframe.to_html()

+0

Đó thực sự là một câu hỏi giao nhau! Nếu "pagination" có thể được thực hiện bằng cách sử dụng các lớp CSS, bạn có thể thử sử dụng [Style] (http://pandas.pydata.org/pandas-docs/stable/style.html) có điều kiện (nghĩa là hàng 0-49 - Kiểu : page1, 50-99 - Kiểu: trang 2, v.v.). – MaxU

+0

Bạn đang cố gắng xem nó trong sổ ghi chép Jupyter, hoặc dưới dạng tệp HTML độc lập? – Shovalt

Trả lời

0

Giải pháp tốt nhất mà tôi có thể nghĩ đến liên quan đến một số thư viện JS bên ngoài: JQueryDataTables plugin. Điều này sẽ cho phép nhiều hơn so với phân trang, với rất ít nỗ lực.

Hãy thiết lập một số HTML, JS và python:

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) 

Và bây giờ chúng tôi có thể tải một tập dữ liệu mẫu để kiểm tra nó:

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) 

Kết quả đẹp: enter image description here

Một vài lưu ý:

  • Lưu ý thông số pageLength trong chuỗi base_html. Đây là nơi tôi đã xác định số hàng mặc định trên mỗi trang. Bạn có thể tìm thấy các tham số tùy chọn khác trong DataTable options page.
  • Chức năng df_window đã được kiểm tra trong sổ ghi chép Jupyter, nhưng cũng nên hoạt động ở đồng bằng python.
  • Bạn có thể bỏ qua df_window và chỉ cần viết giá trị trả lại từ df_html vào tệp HTML.