为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Pandas 求和 TimeField 小时/分钟

使用 Pandas 求和 TimeField 小时/分钟

慕的地10843 2021-11-23 19:53:58
我正在尝试使用 Pandas 来总结一个系列的时间(小时、分钟)。数据来自 TimeFieldclass PhoneRecord ( models.Model ):    et = models.TimeField ( null=True, blank=True )在 python 中,我获取记录并转换为数据帧。phone = PhoneRecord.objects.all()df = read_frame ( phone )df.et = df.et.fillna ( '00:00:00' )    # some records are blankdf [ "time" ] = pd.to_datetime(df.et, format = '%H:%M:%S', errors = 'coerce')这给了我以下输出。0      00:00:351      00:00:292      00:00:003      00:00:004      00:00:37       ......当我尝试总结时df.time.sum ()我收到如下错误: + 不支持的操作数类型:'datetime.time' 和 'datetime.time'我需要做什么才能对数据求和并求平均值。
查看完整描述

2 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

您只需要在此处运行自定义 1-liner 即可将time对象组合成timedelta对象,然后可以将这些对象相加。(见“打印”行)

from datetime import datetime, timedelta

import pandas as pd


phone = PhoneRecord.objects.all()

df = pd.DataFrame(list([i.__dict__ for i in phone])) # create pd.df from model query

df.et = df.et.fillna('00:00:00')  # some records are blank

print(df.et)

print("SUM:", sum([datetime.combine(datetime.min, time) - datetime.min for time in df.et.tolist()], timedelta()))

你应该得到这样的东西:


0    00:00:20

1    00:00:20

2    00:00:50

3    00:00:30

4    00:00:20


SUM: 0:02:20

我不得不稍微改变一些东西才能让它们在我的一端工作,所以希望你和你的 Pandas 和 Django 版本一样。希望这可以帮助!


查看完整回答
反对 回复 2021-11-23
?
四季花海

TA贡献1811条经验 获得超5个赞

所有计算,例如获取平均值、计数等,都应(如果可能)使用数据库引擎执行。我不知道潜在的问题,但pandas在服务器端使用来获取平均值绝对是矫枉过正。您需要查看Django 的聚合功能。


此外,您可能需要重构模型。如果您需要存储电话交谈的持续时间,您可以使用 FloatField 代替,例如


class PhoneRecord(models.Model):

    duration = models.FloatField(blank=True, default=0.0, help_text=_('duration in seconds')) 

    # other fields... 

    # also, you can set up  the duration field with `editable=False`, and 

    # calculate its value each time the record is created

在这种情况下,您可以使用 Avg:


from django.db.models import Avg

PhoneRecords.objects.all().aggregate(Avg('duration'))

得到这样的东西


{'duration_avg': 12.3}


查看完整回答
反对 回复 2021-11-23
  • 2 回答
  • 0 关注
  • 275 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信