Python 熊猫系列.dt.week vs.pd.Period.strftime-what';有什么区别?

Python 熊猫系列.dt.week vs.pd.Period.strftime-what';有什么区别?,python,pandas,datetime,week-number,Python,Pandas,Datetime,Week Number,在对一系列日期进行操作时,可以通过两种不同的方式隔离周数,从而产生不同的结果 对序列中的numpy.datetime64值或pd.Period使用.dt.week访问器会产生与对相同对象使用pd.Period.strftime不同的结果。用于的在线文档说明,年初开始周首次出现之前的所有天数均计为第0周。这遵循标准的python strftime行为 .dt.week访问器似乎从1开始,52周后重新启动,使2018年最后两天成为2019年第1周。仅的联机文档声明它返回一年中的第几周。这似乎是iso

在对一系列日期进行操作时,可以通过两种不同的方式隔离周数,从而产生不同的结果

对序列中的numpy.datetime64值或pd.Period使用
.dt.week
访问器会产生与对相同对象使用
pd.Period.strftime
不同的结果。用于的在线文档说明,年初开始周首次出现之前的所有天数均计为第0周。这遵循标准的python strftime行为

.dt.week
访问器似乎从1开始,52周后重新启动,使2018年最后两天成为2019年第1周。仅的联机文档声明它返回一年中的第几周。这似乎是iso周数

为什么这两种方法的行为存在这种差异?应该使用哪一种?为什么?如何从单个python datetime(或pd.Period或pd.timestamp)对象(而不是序列)优雅地获取iso周数

返回

   Date_string  Date_datestamp Date_period  Week1 Week2
0   2018-12-27     2018-12-27  2018-12-27     52    51
1   2018-12-28     2018-12-28  2018-12-28     52    51
2   2018-12-29     2018-12-29  2018-12-29     52    51
3   2018-12-30     2018-12-30  2018-12-30      1    52
4   2018-12-31     2018-12-31  2018-12-31      1    52
5   2019-01-01     2019-01-01  2019-01-01      1    00
6   2019-01-02     2019-01-02  2019-01-02      1    00
7   2019-01-03     2019-01-03  2019-01-03      1    00
8   2019-01-04     2019-01-04  2019-01-04      1    00
9   2019-01-05     2019-01-05  2019-01-05      1    00
10  2019-01-06     2019-01-06  2019-01-06      2    01
11  2019-01-07     2019-01-07  2019-01-07      2    01

这是因为2018年实际上有53周。我建议使用一年一周的组合,比如

df2['Year-Week']=df2['Date\U period']。应用(lambda x:x.strftime(“%Y-%U”))
编辑: 要查看周数,您可以尝试

df2[“Week2”]=df2['Date\u period']。应用(lambda x:x.strftime(“%W”))
这显示2018年12月31日为第53周

  • %U-获取周数,使用星期天作为一周的第一天
  • %W-获取周数,使用星期一作为一周的第一天

谢谢,这并没有解释为什么strftime方法和.week方法之间存在差异,何时使用,或者如何从标量值优雅地获取iso日期周数(与
.week
访问器返回的值相同)
   Date_string  Date_datestamp Date_period  Week1 Week2
0   2018-12-27     2018-12-27  2018-12-27     52    51
1   2018-12-28     2018-12-28  2018-12-28     52    51
2   2018-12-29     2018-12-29  2018-12-29     52    51
3   2018-12-30     2018-12-30  2018-12-30      1    52
4   2018-12-31     2018-12-31  2018-12-31      1    52
5   2019-01-01     2019-01-01  2019-01-01      1    00
6   2019-01-02     2019-01-02  2019-01-02      1    00
7   2019-01-03     2019-01-03  2019-01-03      1    00
8   2019-01-04     2019-01-04  2019-01-04      1    00
9   2019-01-05     2019-01-05  2019-01-05      1    00
10  2019-01-06     2019-01-06  2019-01-06      2    01
11  2019-01-07     2019-01-07  2019-01-07      2    01