Pandas 如何从熊猫系列中的isoweek整数返回datetime对象?
我被这个问题困住了。虽然我发现了一些类似的问题,但我无法将这些解决方案应用到我的案例中 我有一个小系列,其中有一个实验部署的开始和结束日期。我的目标是获得开始部署的一周的开始日期(周一00小时00分钟),与上周相同 这是我的系列: 输入 输出Pandas 如何从熊猫系列中的isoweek整数返回datetime对象?,pandas,datetime,iso,week-number,Pandas,Datetime,Iso,Week Number,我被这个问题困住了。虽然我发现了一些类似的问题,但我无法将这些解决方案应用到我的案例中 我有一个小系列,其中有一个实验部署的开始和结束日期。我的目标是获得开始部署的一周的开始日期(周一00小时00分钟),与上周相同 这是我的系列: 输入 输出 Camera_Deployment_Start 2015-09-28 11:00:00 Camera_Deployment_End 2017-12-25 16:40:00 dtype: datetime64[ns] Camera_Deploy
Camera_Deployment_Start 2015-09-28 11:00:00
Camera_Deployment_End 2017-12-25 16:40:00
dtype: datetime64[ns]
Camera_Deployment_Start (2015, 40, 1)
Camera_Deployment_End (2017, 52, 1)
dtype: object
None
我想我可以先得到周数,然后返回datetime对象,它将代表一周的开始。所以我这样做了:
df_startend=df_startend.apply(lambda x: x.isocalendar())
输入
输出
Camera_Deployment_Start 2015-09-28 11:00:00
Camera_Deployment_End 2017-12-25 16:40:00
dtype: datetime64[ns]
Camera_Deployment_Start (2015, 40, 1)
Camera_Deployment_End (2017, 52, 1)
dtype: object
None
值得一提的是,我可以忽略(tuple[2])第三个位置的对象。在本例中,两者都是1—一周的第一天—但对于其他数据样本,情况可能并非如此
从现在起,我无法应付。
我的最终目标是生成这两周的所有开始日。可能会使用类似于:
ws=pd.date_range(start=,end=,freq='W')
非常感谢您的关注,非常感谢 如果只有2个元素
系列
首先减去提取的天数,然后用于删除时间,然后使用W-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]
漂亮的回答!非常感谢你!