Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 带日期时间轴的Seaborn热图_Python 3.x_Pandas_Seaborn_Pandas Groupby - Fatal编程技术网

Python 3.x 带日期时间轴的Seaborn热图

Python 3.x 带日期时间轴的Seaborn热图,python-3.x,pandas,seaborn,pandas-groupby,Python 3.x,Pandas,Seaborn,Pandas Groupby,我将创建一个热图,该热图将在x轴上显示年份,在y轴上显示月份。在热图中将显示%returns。这是我想要的 所以我有一些数据,我把它们转换成pct_change()系列 下面是我们正在处理的问题。重要的是要注意索引是一个Datetime对象 GDP DATE 2016-10-01 18905.545 2017-01-01 19057.705 2017-04-01 19250.009 2017-07-01 19500.602 2017-10-01 19736.491

我将创建一个热图,该热图将在x轴上显示年份,在y轴上显示月份。在热图中将显示%returns。这是我想要的

所以我有一些数据,我把它们转换成pct_change()系列

下面是我们正在处理的问题。重要的是要注意索引是一个Datetime对象

    GDP
DATE    
2016-10-01  18905.545
2017-01-01  19057.705
2017-04-01  19250.009
2017-07-01  19500.602
2017-10-01  19736.491
我想这样做,但我不知道如何用datetime索引实现它

gdp = df.pivot(df.index.month, df.index.year, "GDP")
ax = sns.heatmap(gdp)
这(预期)不起作用

KeyError: "Int64Index([ 1,  4,  7, 10,  1,  4,  7, 10,  1,  4,  7, 10,  1,  4,  7, 10,  1,\n             4,  7, 10,  1,  4,  7, 10,  1,  4,  7, 10,  1,  4,  7, 10,  1,  4,\n             7, 10,  1,  4,  7, 10,  1,  4,  7, 10,  1,  4,  7, 10,  1,  4,  7,\n            10,  1,  4,  7, 10,  1,  4,  7, 10,  1,  4,  7, 10,  1,  4,  7, 10,\n             1,  4,  7, 10],\n           dtype='int64', name='DATE') not in index"

它不起作用,因为您在
pivot
函数中提取月份和年份,而这些信息不在您指定的原始
df

您可以事先指定它们:

df["Year"] = df.DATE.apply(lambda x: x.year)
df["Month"] = df.DATE.apply(lambda x: x.strftime("%B"))
df.pivot_table(index="Month",columns="Year",values="GDP", aggfunc="sum").fillna(0)
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
pt = pt.reindex_axis(months)
sns.heatmap(pt, annot=True)
我之所以要对行重新编制索引,是因为在调用
pivot\u table
时,它会按升序对列或行进行排序,这不是通常对月份名称进行排序的方式

上面给了我:

谢谢您的帮助。但是,我如何在框中添加值???@user2179795哦,糟糕,忘了那部分。这很简单,只需在热图函数中指定
annot=True
。我已经更新了答案。亲爱的,我想是这样的。谢谢你看!
df["Year"] = df.DATE.apply(lambda x: x.year)
df["Month"] = df.DATE.apply(lambda x: x.strftime("%B"))
df.pivot_table(index="Month",columns="Year",values="GDP", aggfunc="sum").fillna(0)
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
pt = pt.reindex_axis(months)
sns.heatmap(pt, annot=True)