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

如何使用Python从日期中提取epi Week?pandas调用epiweeks报错如何解决

错误原因

Week.fromdate() 方法仅支持传入单个 datetime 类型对象,你传入的是 pandas 的 Series 整列数据,方法无法识别序列类型,因此抛出属性不存在的报错。

修复方案

你可以通过 apply 方法逐行处理日期列,适配 epiweeks 库的调用规则:

import pandas as pd
from epiweeks import Week, Year

a= [('2021-06-11 00:00:00'),
 ('2021-06-11 00:00:00'),
 ('2021-06-11 00:00:00'),
 ('2021-06-11 00:00:00'),
 ('2021-06-11 00:00:00'),
 ('2021-06-11 00:00:00'),
 ('2021-06-18 00:00:00'),
 ('2021-06-18 00:00:00'),
 ('2021-06-18 00:00:00'),
 ('2021-06-18 00:00:00'),
 ('2021-06-18 00:00:00'),
 ('2021-06-18 00:00:00'),
 ('2021-06-18 00:00:00')]
b = [25,58,65,45,47,85,96,36,25,14,25,78,75]

fecha = pd.DataFrame(list(zip(a,b)))
fecha[0] = pd.to_datetime(fecha[0])

# 逐行调用fromdate,可根据需要选择周体系,system可选'cdc'或'iso'
fecha['epiweek_obj'] = fecha[0].apply(lambda x: Week.fromdate(x, system='cdc'))
# 仅提取周数的话追加.week属性即可
fecha['epiweek_num'] = fecha['epiweek_obj'].apply(lambda x: x.week)
其他提取流行病学周的实现方式
  • 用pandas内置方法(仅支持ISO标准周,每周从周一开始,每年第一个周包含1月4日)
    pandas 1.1.0及以上版本可直接调用dt.isocalendar():
    # 直接提取ISO周数
    fecha['iso_week'] = fecha[0].dt.isocalendar().week
    
    低版本pandas可以用apply调用datetime对象的isocalendar方法:
    fecha['iso_week'] = fecha[0].apply(lambda x: x.isocalendar()[1])
    
  • 自定义周规则实现
    如果需要适配特殊的周起始日、周计数规则,可以自己写偏移计算逻辑,比如要实现周日为起始的周计数:
    # 周日为一周第一天的周数计算
    fecha['custom_week'] = (fecha[0] - pd.Timedelta(days=6)).dt.isocalendar().week
    

注意:不同周计数体系的结果存在差异,epiweeks库默认使用美国CDC的MMWR周规则(每周从周日开始,每年第一个周至少有3天属于新的一年),和ISO周规则输出结果可能不同,需要根据你的业务需求选择对应方案。

内容的提问来源于stack exchange,提问作者Gerald Vasquez Aleman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:36:03