如何在Python Pandas中使用isocalendar函数从时间序列获取工作周
使用isocalendar生成格式为“YYYYWW”的工作周(WW)
实现思路
- 首先得把你的时间字符串转换成datetime类型,这样才能调用
isocalendar()方法 isocalendar()会返回一个包含(年份, ISO周数, 星期几)的元组,我们只需要前两个值- 把年份转成字符串,周数格式化为两位数字(比如第5周变成
05),最后拼接成YYYYWW的格式
代码示例(基于Pandas处理时间序列)
如果你的数据是Pandas DataFrame,用下面的方法最方便:
import pandas as pd # 构造你的时间序列数据 data = { 'Time': [ '2016-09-10T23:20:00.000000000', '2016-08-10T23:20:00.000000000', '2016-09-10T23:20:00.000000000', '2017-09-10T23:20:00.000000000', '2016-09-10T23:20:00.000000000' ] } df = pd.DataFrame(data) # 第一步:把Time列转成datetime格式 df['Time'] = pd.to_datetime(df['Time']) # 第二步:获取ISO年份和周数 iso_info = df['Time'].dt.isocalendar() # 第三步:拼接成YYYYWW格式的WW列 df['WW'] = iso_info['year'].astype(str) + iso_info['week'].astype(str).str.zfill(2) # 查看结果 print(df[['Time', 'WW']])
运行后输出的结果大概是这样:
Time WW 0 2016-09-10 23:20:00 201637 1 2016-08-10 23:20:00 201632 2 2016-09-10 23:20:00 201637 3 2017-09-10 23:20:00 201736 4 2016-09-10 23:20:00 201637
原生Python单时间处理示例
如果只是处理单个时间字符串,用原生datetime模块也可以:
from datetime import datetime # 单个时间字符串 time_str = '2016-09-10T23:20:00.000000000' dt_obj = datetime.fromisoformat(time_str) # 获取ISO年份和周数 year, week_num, _ = dt_obj.isocalendar() # 格式化输出 ww_format = f"{year}{week_num:02d}" print(ww_format) # 输出:201637
注意点
isocalendar()返回的年份是ISO年份,少数情况下可能和日历年份不一致(比如1月1日可能属于上一年的最后一周),如果需要严格用日历年份,可以替换成dt_obj.year而不是ISO年份- 用
str.zfill(2)或者格式化字符串:02d是为了保证周数是两位,避免出现20165这种不符合要求的格式
内容的提问来源于stack exchange,提问作者Shi Jie Tio
相关产品推荐
相关产品推荐

