【问题标题】:Extract only the last 7 days of data in Python [duplicate]仅在 Python 中提取最近 7 天的数据 [重复]
【发布时间】: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

标签: python django


【解决方案1】:

您可以像这样过滤日期:

Entry.objects.filter(created_at__gte=datetime.now()-timedelta(days=7))

【讨论】:

  • 请注意,没有迹象表明存在created_at 列。只需created_yearcreated_monthcreated_day。而且这些列似乎不是日期(时间)列,只是(整数)值。
猜你喜欢
  • 2019-09-14
  • 1970-01-01
  • 1970-01-01
  • 2020-09-03
  • 2017-09-25
  • 2021-07-30
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
相关资源
最近更新 更多