[英]Seaborn Heatmap with Datetime Axes
我並創建一個熱圖,該熱圖在x軸上有年份,在y軸上有月份。 在熱圖中將顯示%回報。 這有點我所追求的。
因此,我有一些數據,並將它們轉換為pct_change()系列。
import pandas_datareader.data as web
import pandas as pd
from datetime import datetime as dt
import numpy as np
import seaborn as sns
start = dt(year = 2000, month = 1, day = 1)
df = web.DataReader('GDP', 'fred', start = '2000')
df.pct_change()
df.tail()
這就是我們正在合作的東西。 重要的是要注意,索引是一個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_table
,它以升序對列或行進行排序,而這通常不是月份名稱的排序方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.