我目前正在尝试学习如何将通过Coursera和Dataquest学习的数据科学技能应用于小小的个人项目。
我在美国卫生和公共服务部的Google BigQuery上找到了一个数据集,其中包含1888年至2013年之间发布的所有美国所有城市和州的全国应通报疾病的每周监测报告。
我将数据导出到一个.csv文件,并将其导入到我通过Anaconda运行的Jupyter笔记本中。在查看数据集的标题后,我注意到日期/星期显示为“ epi_week”。
我试图使数据更具可读性和可用于某些分析,为此,我希望将其转换为DD / MM / YYYY或Week / Month / Year等。
我做了一些研究,显然Epi-week也被称为CDC周,到目前为止,我发现了python 3的扩展/程序包,称为“ epiweeks”。
使用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']]
最佳答案
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]))
结果是: