我正在编写一个django应用程序,我从数据库中收集数据。我的模型包含一个名为date的日期字段。
我想将日期放入折线图中。因为表格中可能有数百个日期。我想通过从整个表格中选择10个相等距离的日期来缩小数据。
例如,如果我的行包含日期1/09/2013 - 20/09/2013,我想得到:
1/09/2013
3/09/2013
5/09/2013
7/09/2013
9/09/2013
11/09/2013
13/09/2013
15/09/2013
17/09/2013
19/09/2013
这是我的模特:
class Model(models.Model):
date = models.DateField()
这是我的问题:
data = Model.objects.all()
我想以最安全的方式做到这一点,因为我的数据库中的日期可能是不规则的。
如何根据data.date
这样划分数据?是否有django的预建功能?任何建议将不胜感激。
答案 0 :(得分:1)
尝试:只需获取第一个和最后一个日期之间的差异,除以10即可获得2个记录之间的差异。然后循环获取10条记录。
data = Model.objects.all().order_by('date')
n = data.length()
date_first = data[0].date
date_last = data[n].date
days_diff = (date_last-date_first).days
diff= days_diff/10;
# Now store date in a list
date=[]
for i in range(0,10)
date.insert(i,date_first + i* datetime.timedelta(days=diff) )
答案 1 :(得分:0)
我知道这个问题有一个答案,但是最可靠,无错误的方法是仅依靠内置的pandas
功能。
>>> import pandas as pd
>>> start = pd.Timestamp('2013-9-1')
>>> end = pd.Timestamp('2013-9-20')
>>> periods = 10
>>> freq = (end - start + pd.Timedelta(days=1)) // periods
>>> dates = pd.date_range(start, periods=periods, freq=freq)
>>> dates
DatetimeIndex(['2013-09-01', '2013-09-03', '2013-09-05', '2013-09-07',
'2013-09-09', '2013-09-11', '2013-09-13', '2013-09-15',
'2013-09-17', '2013-09-19'],
dtype='datetime64[ns]', freq='2D')
>>> dates.to_pydatetime().tolist()
[datetime.datetime(2013, 9, 1, 0, 0),
datetime.datetime(2013, 9, 3, 0, 0),
datetime.datetime(2013, 9, 5, 0, 0),
datetime.datetime(2013, 9, 7, 0, 0),
datetime.datetime(2013, 9, 9, 0, 0),
datetime.datetime(2013, 9, 11, 0, 0),
datetime.datetime(2013, 9, 13, 0, 0),
datetime.datetime(2013, 9, 15, 0, 0),
datetime.datetime(2013, 9, 17, 0, 0),
datetime.datetime(2013, 9, 19, 0, 0)]