使用此数据框的日期时出现问题
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)
我正在使用如下所示的数据框:
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)