如何将Django模型导出到按特定列排序的熊猫数据框

时间:2019-07-02 16:23:20

标签: python django pandas django-models

我正在开发一个Django Web应用程序,该应用程序使用bokeh在浏览器中可视化存储在SQLite中的数据。

由于我想将数据显示为stacked area plot,因此得出结论,在绘制之前,使用pandas库将django模型中的数据保存到数据框可能会有所帮助。

我的Django models.py包含以下模型:

class Activity(models.Model):

    def __str__(self):
        return self.title

    title = models.CharField(max_length=50)
    sport = models.ForeignKey(Sport, on_delete=models.CASCADE)
    date = models.DateField(blank=False)
    duration = models.FloatField()
    distance = models.FloatField(blank=True, null=True)
    description = models.CharField(max_length=50, blank=True, null=True)
    trace_file = models.ForeignKey(TraceFiles, on_delete=models.CASCADE, blank=True, null=True)

SQLite数据库中的一些示例数据可能类似于:

| id |   title   |    date    | duration | sport_id | trace_file_id | description | distance |
|--------------------------------------------------------------------------------------------|
| 1  | biking01  | 2019-01-01 | 183      | 1        | 16            | NULL        | 142      |
| 2  | running17 | 2019-01-01 | 45       | 2        | 2             | NULL        | 14       |
| 3  | biking02  | 2019-01-01 | 67       | 1        | 18            | NULL        | 45       |

从模型读取并将数据转换为熊猫数据框的最佳方法是什么?例如,我的views.py中有类似的代码:

from .models import Activity
import pandas as pd

activities = Activity.objects.all().order_by("-date")
...

类似于this example中的数据框,我想获得一个如下所示的数据框,以便绘制散景区域图。

   sport_id  duration  date
0  1         183       2019-01-02
1  1         67        2019-05-06
2  2         45        2019-03-04

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果您只是想简单地导出数据以在Django应用程序外部进行可视化,请查看ImportExportModelAdmin https://django-import-export.readthedocs.io/en/latest/api_admin.html

您可以对每个项目的列表进行for循环,然后将列表设置为新的df列

import pandas as pd
df = pd.DataFrame()
game = []

for i in range(0,len(yourquery)):
    game.append(yourquery[i].game_id)
df['game_id'] = game

我以前没有使用过bokeh,但是我使用过plotly.py,从经验来看,图表加载速度非常慢。考虑使用诸如plotly.js之类的东西,该东西可以呈现相似的图表,但是从后端传递的json数据中。我正在研究的当前项目(可能与您的相似)使用plotly.js site