【问题标题】:How to get back to a datetime object from an isoweek integer in a pandas series?如何从熊猫系列中的等周整数返回日期时间对象?
【发布时间】:2018-11-12 12:31:54
【问题描述】:

我被这个问题困住了。虽然我发现了一些类似的问题,但我无法将解决方案应用于我的案例。

我有一个小系列,其中我有一个实验性部署的开始日期和结束日期。我的目标是获取开始部署的一周的开始日期(星期一 00h 00min),并且与上周相同。

这是我的系列:

输入

print(df_startend)

输出

Camera_Deployment_Start   2015-09-28 11:00:00
Camera_Deployment_End     2017-12-25 16:40:00
dtype: datetime64[ns]

我想我可以先获取周数,然后返回一个日期时间对象,它代表一周的开始。所以我这样做了:

df_startend=df_startend.apply(lambda x: x.isocalendar())

输入

print(df_startend)

输出

Camera_Deployment_Start    (2015, 40, 1)
Camera_Deployment_End      (2017, 52, 1)
dtype: object
None

值得一提的是,我可以忽略 (tuple[2]) 的第 3 位的对象。在这个例子中,两者都是巧合 1 - 一周的第一天 - 但其他数据样本可能并非如此。

从这里开始,我无法管理。 我的最终目标是生成其间所有星期的所有开始日。可能使用类似的东西:

ws=pd.date_range(start=,end=,freq='W')

非常感谢您的关注,非常感谢!

【问题讨论】:

    标签: pandas datetime iso week-number


    【解决方案1】:

    如果只有 2 个元素 Series 首先减去由 dayofweek 提取的天数,然后使用 floor 删除时间,然后使用 date_rangeW-Mon 偏移:

    print (df_startend)
    Camera_Deployment_Start   2015-09-28 11:00:00
    Camera_Deployment_End     2015-12-25 16:40:00
    dtype: datetime64[ns]
    
    
    s = (df_startend - pd.to_timedelta(df_startend.dt.dayofweek, unit='d')).dt.floor('d')
    
    ws=pd.date_range(start=s['Camera_Deployment_Start'],
                     end=s['Camera_Deployment_End'],
                     freq='W-Mon')
    print (ws)
    DatetimeIndex(['2015-09-28', '2015-10-05', '2015-10-12', '2015-10-19',
                   '2015-10-26', '2015-11-02', '2015-11-09', '2015-11-16',
                   '2015-11-23', '2015-11-30', '2015-12-07', '2015-12-14',
                   '2015-12-21'],
                  dtype='datetime64[ns]', freq='W-MON')
    

    详情

    print (s)
    Camera_Deployment_Start   2015-09-28
    Camera_Deployment_End     2015-12-21
    dtype: datetime64[ns]
    

    isocalendar 的解决方案:

    s = df_startend.apply(lambda x: '-'.join(str(y) for y in x.isocalendar()[:2]))
    s = pd.to_datetime(s + '-1', format='%Y-%W-%w') - pd.Timedelta(7, 'd')
    
    print (s)
    Camera_Deployment_Start   2015-09-28
    Camera_Deployment_End     2015-12-21
    dtype: datetime64[ns]
    

    【讨论】:

    • 漂亮的答案!非常感谢!
    猜你喜欢
    • 2019-03-24
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 2018-05-29
    • 2014-07-17
    相关资源
    最近更新 更多