You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:56:27