【问题标题】:How do you convert formatted 'epi-week' to date using Python?如何使用 Python 将格式化的“epi-week”转换为日期?
【发布时间】:2019-05-24 14:51:13
【问题描述】:

我目前正在尝试学习如何将通过 Coursera 和 Dataquest 学到的数据科学技能应用到小型个人项目中。

我在美国卫生与公众服务部的 Google BigQuery 上找到了一个数据集,其中包括 1888 年至 2013 年间发布的所有美国城市和州的全国法定疾病的每周监测报告。

我将数据导出到 .csv 文件并将其导入到我正在通过 Anaconda 运行的 Jupyter 笔记本中。查看数据集的标题后,我注意到日期/周显示为“epi_week”。

我正在尝试使数据更具可读性和可用于某些分析,为此我希望将其转换为 DD/MM/YYYY 或周/月/年等方面的内容。

我做了一些研究,显然 epi-weeks 也被称为 CDC 周,到目前为止,我找到了一个名为“epiweeks”的 python 3 扩展/包。

使用 epiweeks 包,我可以将一些“正常”日期转换为包创建者所指的某种 epi 周形式,但它们看起来与我在数据集中看到的完全不同。


例如,如果我使用今天的日期,即 2019 年 5 月 24 日 (24/05/2019),则输出为:“2019 年第 21 周”,但这是数据中的前四个条目(并遵循相同的格式,所有其他的)看起来像:

epi_week

'197006'

'197007'

'197008'

'197012'


In [1]: disease_header

Out [1]: 
[['epi_week', 'state', 'loc', 'loc_type', 'disease', 'cases', 'incidence_per_100000']]

In [2]: disease[:4]

Out [2]:
[['197006', 'AK', 'ALASKA', 'STATE', 'MUMPS', '0', '0'],
['197007', 'AK', 'ALASKA', 'STATE', 'MUMPS', '0', '0'],
['197008', 'AK', 'ALASKA', 'STATE', 'MUMPS', '0', '0'],
['197012', 'AK', 'ALASKA', 'STATE', 'MUMPS', '0', '0']]

【问题讨论】:

    标签: python date week-number


    【解决方案1】:

    epiweeks 包的开发是为了解决您在此处遇到的问题。

    使用您提供的示例数据,让我们创建一个包含周结束日期的新列:

    import pandas as pd
    from epiweeks import Week
    
    columns = ['epi_week', 'state', 'loc', 'loc_type',
               'disease', 'cases', 'incidence_per_100000']
    data = [
        ['197006', 'AK', 'ALASKA', 'STATE', 'MUMPS', '0', '0'],
        ['197007', 'AK', 'ALASKA', 'STATE', 'MUMPS', '0', '0'],
        ['197008', 'AK', 'ALASKA', 'STATE', 'MUMPS', '0', '0'],
        ['197012', 'AK', 'ALASKA', 'STATE', 'MUMPS', '0', '0']
    ]
    
    df = pd.DataFrame(data, columns=columns)
    
    # Now create a new column with week ending date in ISO format
    df['week_ending'] = df['epi_week'].apply(lambda x: Week.fromstring(x).enddate())
    

    结果如下:

    我建议您查看 Epiweeks 包documentation 以获取更多示例。

    如果您只需要年和周列,则无需使用 Epiweeks 包即可:

    df['year'] = df['epi_week'].apply(lambda x: int(x[:4]))
    df['week'] = df['epi_week'].apply(lambda x: int(x[4:6]))
    

    结果如下:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-15
      • 2014-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多