【发布时间】:2021-03-13 22:01:51
【问题描述】:
如果我有这样的数据并且我只想提取最近 7 天的数据,我该怎么做?
我尝试使用 Pandas 示例,但出现 module 'pandas' has no attribute 'example' 或 'list' object has no attribute 'example' 之类的错误,因此我在 7 天内无法获取数据。
另外,我在前端使用 React。在处理这样的数据时,最好是在前端还是后端呢?
"daily_report": [
{
"date": "2020/03/27",
"count": 999
},
{
"date": "2020/03/28",
"count": 0
},
{
"date": "2020/03/29",
"count": 0
},
{
"date": "2020/03/30",
"count": 0
},
{
"date": "2020/03/31",
"count": 0
},
{
"date": "2020/04/01",
"count": 0
},
{
"date": "2020/04/02",
"count": 0
},
{
"date": "2020/04/03",
"count": 0
},
{
"date": "2020/04/04",
"count": 0
},
{
"date": "2020/04/05",
"count": 0
},
{
"date": "2020/04/06",
"count": 0
},
{
"date": "2020/04/07",
"count": 0
},
{
"date": "2020/04/08",
"count": 0
},
{
"date": "2020/04/09",
"count": 0
},
{
"date": "2020/04/10",
"count": 0
},
{
"date": "2020/04/11",
"count": 0
},
{
"date": "2020/04/12",
"count": 0
},
{
"date": "2020/04/13",
"count": 0
},
]
def get_daily_report(self, obj):
data = Entry.objects.all().values(
'created_at__year', 'created_at__month',
'created_at__day').annotate(Sum('time')).order_by(
'created_at__year', 'created_at__month', 'created_at__day')
mappedData = {
f"{record['created_at__year']}-{record['created_at__month']}-{record['created_at__day']}":
record['time__sum']
for record in data
}
s = pd.Series(mappedData)
idx = pd.date_range(s.index.min(), s.index.max())
s.index = pd.DatetimeIndex(s.index)
s = s.reindex(idx, fill_value=0)
now_ts = pd.to_datetime(s.index)
now_ts = s.index.strftime('%Y/%m/%d')
result = [{
"date": f"{now_ts[i]}",
"count": s[i]
} for i in range(len(s))]
return result
【问题讨论】:
-
如果可以,请确保您的
date日期是数据库中的实际日期。这将使事情变得容易得多。这意味着将年、月和日条目组合到一个对象中。 -
您可以在 Django 查询中使用过滤器来立即过滤掉超过特定日期的对象。
-
当您说“最近 7 天的数据”时,您的意思是相对于当天,还是相对于结果中的最近日期?
-
这是从当前日期和时间到 7 天前。
-
请从您的 Django 模型文件中显示相关的
Entry。