首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将分钟转换为无天数的全时

将分钟转换为无天数的全时
EN

Stack Overflow用户
提问于 2022-01-02 22:28:45
回答 3查看 175关注 0票数 0

对于重型机械,人们通常需要知道机器运行的小时数。我有一个有开始时间和结束时间的数据。每次使用机器时,我计算机器使用的分钟数。这将导致列df['minutes']

如何将分钟转换为小时?3,346分钟,我应该有55小时46分钟,或55:46

将此用作一个工作示例:

代码语言:javascript
复制
df = pd.DataFrame(columns = ['minutes'], data =[3346])
  • 如果我用这个,我会得到07:46: df‘工期’=pd.to_datetime(df‘M’,unit='m').dt.strftime('%H:%M')
  • 如果我用这个,我会得到03 07:46 07:46: df‘工期’=pd.to_datetime(df‘M’,unit='m').dt.strftime('%d %H:%M') 为什么是三(03)?
  • 我还尝试对分钟列使用apply和gmtime,该列返回03 07:46: def dur_time1( x):x*=60 x= time.gmtime(x) x= time.strftime("%d %H:%M",x)返回x df‘工期’=df‘M’..apply(Dur_time1)
  • 最后,我尝试对分钟列使用apply和timedelta,该列返回2 days 07:46:00: def dur_time2( x):x*=60 x=timedelta(秒=x)返回x‘工期’=df‘def’.x*=60(Dur_time2) 我可以和这两天一起生活,我可以把这两天分开,乘以24。但这似乎很复杂。

但这些解决方案都没有显示55小时46分钟。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-01-02 22:39:46

您可以使用此函数:

代码语言:javascript
复制
def minutes_to_hours(minutes : int):
    time = '{}:{}'.format(minutes//60,minutes%60)
    return time 

输出:

代码语言:javascript
复制
55:46
票数 3
EN

Stack Overflow用户

发布于 2022-01-02 22:45:12

divmod也是一种选择:

代码语言:javascript
复制
def minutes_to_hours(minutes: int):
    return '{}:{}'.format(*divmod(minutes,60))
票数 1
EN

Stack Overflow用户

发布于 2022-01-02 23:54:13

你的结果绝对没有问题。Python做了你想要它做的事情。

案例1:您要求python给出时间组件中的小时和分钟。

代码语言:javascript
复制
df['duration'] = pd.to_datetime(df['minutes'], unit='m').dt.strftime('%H:%M')

案例2:您要求python给出时间组件中的天、小时和分钟。

代码语言:javascript
复制
pd.to_datetime(df['minutes'], unit='m').dt.strftime('%d %H:%M')

从文档来看,%d做了以下工作;

python是一个C编译器。在C中,tm_mday从1开始查找下一天/前几天。简单地说;

代码语言:javascript
复制
strftime() takes an
       argument of data type time_t, which represents calendar time.
       When interpreted as an absolute time value, it represents the
       number of seconds elapsed since the Epoch, 1970-01-01 00:00:00
       +0000 (UTC)

在您的示例中,由于在这个时间组件中有55.766667 hours,所以strftime('%d %H:%M')将其解释为3rd day, 7th Hour 46th Minute since the Epoch, 1970-01-01 00:00:00 +0000 (UTC)。如果你把它改为pd.to_datetime(df['minutes'], unit='m').dt.strftime('%d %I:%M'),你就会意识到它用0来代替它。

如果您想要找到确切的时间组件计数,请使用numpy的日期单位

代码语言:javascript
复制
df['minutes'].astype('timedelta64[m]')/60

如前所述,numpy的日期时间单位中的时间跨度是64位整数乘以日期或单位长度的范围。这是时间span for ‘D’ (day) is exactly 24 times longer than the time span for ‘h’ (hour),它将分钟转换为精确的时间组件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70560231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档