我已经看到了很多关于如何使用日期字符串的帖子,但我正在尝试为 Dataframe 列做一些事情,到目前为止没有任何运气。我当前的方法是:从“myday”中获取工作日,然后偏移以获取星期一。
df['myday'] is column of dates.
mydays = pd.DatetimeIndex(df['myday']).weekday
df['week_start'] = pd.DatetimeIndex(df['myday']) - pd.DateOffset(days=mydays)
但我得到TypeError:timedelta days组件不支持的类型:numpy.narray
如何从df专栏中获取每周开始日期?
5条答案
按热度按时间yyhrrdl81#
另一种选择:
这将“week_start”设置为“myday”中时间之前的第一个星期一。
您可以通过锚定偏移量选择不同的周开始,例如
’W-THU’
,将周开始时间改为周四。(感谢@Henry Ecker的建议)zkure5ic2#
虽然@knightofni和@Paul的解决方案都有效,但我倾向于避免在Pandas中使用apply,因为它通常比基于数组的方法慢。为了避免这种情况,在转换为datetime列(通过
pd.to_datetime
)之后,我们可以修改基于工作日的方法,只需将星期几转换为numpy timedelta64[D],方法是直接转换:或者按照@ribitskiyb的建议使用to_timedelta:
使用60000个日期时间的测试数据,我使用新发布的Pandas 1.0.1给出了以下建议答案。
这些结果表明,Pandas 1.0.1大大提高了基于to_period应用程序的方法的速度(vs Pandas<=0.25),但表明直接转换为时间增量(通过直接转换类型
.astype('timedelta64[D]')
或使用pd.to_timedelta
)仍然是优越的。基于这些结果,我建议继续使用m1n 3o1p。uqcuzwp83#
(只是添加到n8yoder的答案中)
使用
.astype('timedelta64[D]')
对我来说似乎不那么易读——找到了一种仅使用Pandas功能的替代方法:zte4gxcn4#
它失败是因为pd.DateOffset需要一个整数作为参数(并且您正在给它一个数组)。只能使用DateOffset将日期列更改为相同的偏移量。
试试这个:
我还没有真正测试过这段代码(没有样本数据),但这应该适用于您所描述的内容。
然而,您可能想看看pandas.Resample,它可能会提供更好的解决方案,具体取决于您要寻找的内容。
zynd9foi5#