使用此数据框的日期时出现问题

Problems working with the dates of this dataframe

我正在使用如下所示的数据框:

        REGION  YEAR  WEEK ILITOTAL TOTAL_PATIENTS
0      Alabama  2010    40      249          11664
52     Alabama  2010    41      239          11602
104    Alabama  2010    42      232          11945
156    Alabama  2010    43      274          12036
208    Alabama  2010    44      342          12069
...        ...   ...   ...      ...            ...
22688  Alabama  2018    48     1263          41155
22742  Alabama  2018    49     1152          38716
22796  Alabama  2018    50     1420          38703
22850  Alabama  2018    51     1585          38533
22904  Alabama  2018    52     1977          38097

而且它没有 YYYY/MM/DD 格式的日期这一事实给我带来了一些麻烦,主要是在绘图方面。例如,在这种情况下,我想以大致如下的情节结束:

plot

为此,我刚刚离开了 YEAR、WEEK 和 TOTAL_PATIENTS,并且我尝试合并 WEEK 和 YEAR 列,

Sdf_copy["WEEK_YEAR"] = Sdf_copy.WEEK.astype(str).str.cat(Sdf_copy.YEAR.astype(str), sep="-")

Sdf_AL = Sdf_copy[['WEEK_YEAR', 'TOTAL_PATIENTS']].copy()
print(Sdf_AL)

最后是这样的:

      WEEK_YEAR TOTAL_PATIENTS
0       40-2010          11664
52      41-2010          11602
104     42-2010          11945
156     43-2010          12036
208     44-2010          12069
...         ...            ...
22688   48-2018          41155
22742   49-2018          38716
22796   50-2018          38703
22850   51-2018          38533
22904   52-2018          38097

我试过用不同的方式绘制它,一个简单的图

plt.plot(Sdf_AL)
plt.show()

给出了这个错误:TypeError: unhashable type: 'numpy.ndarray' 像这样

plt.plot(Sdf_AL.TOTAL_PATIENTS)
plt.show()

plt.plot(Sdf_AL.WEEK_YEAR, Sdf_AL.TOTAL_PATIENTS)
plt.show()

结果总是类似这样:

plot

任何帮助将不胜感激,谢谢!

这里有两部分问题: (1) 您遇到没有特定日期的日期问题 (2) 您无法正确绘制。

寻址 (1): 最方便的方法是将星期开始硬编码为日期,并将其转换为日期时间对象以便于绘图:

Sdf_AL['WEEK_YEAR'] = pd.to_datetime(Sdf_AL['WEEK_YEAR']+'-1', format='%W-%Y-%w')

此处的 +'-1' 是将工作日数字硬编码到列 WEEK_YEAR,以便 WEEK_YEAR 看起来像例如。 40-2010-1 格式为 Week-Year-Weekday(转换为日期时间之前)。

寻址 (2): 在 plt.plot(Sdf_AL.TOTAL_PATIENTS) 中,您没有明确指定情节的 x-axis 和 y-axis。因此,该图会自动使用索引呈现为 x-axis。在你的例子中,Sdf_AL 中的索引类似于 [0, 52, 104, 156, 208, ...] 因此奇怪的情节呈现。

您应该明确指定轴。尝试

plt.plot(Sdf_AL.WEEK_YEAR, Sdf_AL.TOTAL_PATIENTS)