如何从 pandas 系列中的等周整数返回到日期时间对象?
How to get back to a datetime object from an isoweek integer in a pandas series?
我被这个问题困住了。虽然我发现了一些类似的问题,但我无法将解决方案应用到我的案例中。
我有一个小系列,其中我有一个实验性部署的开始和结束日期。我的目标是获取开始部署的一周的开始日期(星期一 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]
我想我可以先获取周数,然后返回一个 datetime 对象,它代表一周的开始。所以我这样做了:
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')
非常感谢您的关注,非常感谢!
如果只有 2 个元素 Series
firstsubtract days 由 dayofweek
and then use floor
for remove times and then date_range
和 W-Mon
offset 提取:
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]
我被这个问题困住了。虽然我发现了一些类似的问题,但我无法将解决方案应用到我的案例中。
我有一个小系列,其中我有一个实验性部署的开始和结束日期。我的目标是获取开始部署的一周的开始日期(星期一 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]
我想我可以先获取周数,然后返回一个 datetime 对象,它代表一周的开始。所以我这样做了:
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')
非常感谢您的关注,非常感谢!
如果只有 2 个元素 Series
firstsubtract days 由 dayofweek
and then use floor
for remove times and then date_range
和 W-Mon
offset 提取:
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]