Python 熊猫系列.dt.week vs.pd.Period.strftime-what';有什么区别?
在对一系列日期进行操作时,可以通过两种不同的方式隔离周数,从而产生不同的结果 对序列中的numpy.datetime64值或pd.Period使用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
.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-获取周数,使用星期一作为一周的第一天
.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