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

时间读为时间增量,前面有很多天

时间读为时间增量,前面有很多天

慕尼黑5688855 2021-04-05 17:19:25
我正在处理过去一年左右的睡眠数据集。我已经将CSV读入了熊猫数据框。其中有一个名为的列'Duration'。我将其转换为timeDelta,如下所示:df.Duration = pd.to_timedelta(df.Duration)df.Duration.head()哪个输出0   17711 days 08:27:001   17711 days 07:56:002   17711 days 04:22:003   17711 days 07:29:004   17711 days 06:46:00Name: Duration, dtype: timedelta64[ns]我有点理解为什么我会在工作时间前得到17711天,但我真正想要的只是工作时间。为了解决这个问题,我可以写df.Duration = (df.Duration - pd.Timedelta('17711 days'))这给了我0   08:27:001   07:56:002   04:22:003   07:29:004   06:46:00Name: Duration, dtype: timedelta64[ns]但是,这是一种非常脆弱的方法。有一种更好的方法来获取我想要的时间吗?
查看完整描述

2 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

datetime.timdelta对象将天,秒和微秒存储为属性。我们可以在访问它们pandas.DataFramedt

设置一些虚拟数据


import datetime as dt

import pandas as pd


df = pd.DataFrame(

    data=(

        dt.timedelta(days=17711, hours=i, minutes=i, seconds=i) for i in range(0, 10)

    ), 

    columns=['Duration']

)


print(df['Duration'])


             Duration

0 17711 days 00:00:00

1 17711 days 01:01:01

2 17711 days 02:02:02

3 17711 days 03:03:03

4 17711 days 04:04:04

5 17711 days 05:05:05

6 17711 days 06:06:06

7 17711 days 07:07:07

8 17711 days 08:08:08

9 17711 days 09:09:09

Name: Duration, dtype: timedelta64[ns]

加快秒数,将其转化为小时


print(df['Duration'].dt.seconds / 3600)


0    0.000000

1    1.016944

2    2.033889

3    3.050833

4    4.067778

5    5.084722

6    6.101667

7    7.118611

8    8.135556

9    9.152500

Name: Duration, dtype: float64    

只有几个小时


print(df['Duration'].dt.seconds // 3600)


0    0

1    1

2    2

3    3

4    4

5    5

6    6

7    7

8    8

9    9

Name: Duration, dtype: int64


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

添加回答

举报

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