如何使用django paginator在页面上拆分DataFrame(pandas)?

时间:2016-11-21 19:46:08

标签: python django pandas django-pagination

Series很容易。我把它传递给paginator。但是,当我使用DataFrame时,它是调用"系列的真值是模糊的"。也许,count方法存在问题,但我不知道如何更改它。在我的项目DataFrame中,必须按行拆分。

def listing(request):
    contact_list = pd.DataFrame(np.arange(12).reshape(4,3))
    paginator = Paginator(contact_list, 1)  # Show 1 row per page

page = request.GET.get('page')
try:
    contacts = paginator.page(page)
except PageNotAnInteger:
    # If page is not an integer, deliver first page.
    contacts = paginator.page(1)
except EmptyPage:
    # If page is out of range (e.g. 9999), deliver last page of results.
    contacts = paginator.page(paginator.num_pages)

return render(request, 'list.html', {'contacts': contacts})

3 个答案:

答案 0 :(得分:1)

问题可能是由于DataFrame.__iter__按列而不是按行进行迭代。如果要获取数据帧行的迭代器,可以调用df.iterrows()df.values

答案 1 :(得分:1)

您必须隔离列,然后在每个列上使用分页,然后将它们附加在一起,因为数据框在列上进行迭代。基本上,通过分隔每一列,您可以使迭代器遍历行:

contact_list = pd.DataFrame(np.arange(12).reshape(4,3))

paginator1 = Paginator(contact_list ['col1'],1)

paginator2 = Paginator(contact_list ['col2'],1)

答案 2 :(得分:0)

我已经使用自己的数据帧测试了以下代码,并且可以正常工作。只需将数据框转换为字典列表,分页器就可以正常工作。
抱歉,我刚刚提出了这个问题

records = df.to_dict(orient='records')

paginator = Paginator(records, num_of_items)
page = request.GET.get('page')
records = paginator.get_page(page)
return render(request, 'list.html', {'contacts': records})