【问题标题】:Pandas DataFrame to SeabornPandas DataFrame 到 Seaborn
【发布时间】:2017-09-09 12:02:34
【问题描述】:

我正在尝试使用 pandas DataFrame 绘制 seaborn 热图。 我的数据格式如下

visit_table

   yyyymm  visit_cnt
0  201101      91252
1  201102     140571
2  201103     141457
3  201104     147680
4  201105     154066
...

68  201609     591242
69  201610     650174
70  201611     507579
71  201612     465218

如何将 DataFrame 更改为 seaborn 数据格式,如下所示

  2011       2012     2013   2015

1     91252
2     14057
3     147680
4     154066
...
11    123455
12    1234456

【问题讨论】:

    标签: pandas dataframe seaborn


    【解决方案1】:

    您可以使用to_datetime 转换列yyyymm,然后使用dt.monthdt.year 创建新的Series(列)。最后由pivot 重塑,如有必要,将NaN 替换为0fillna

    df['yyyymm'] = pd.to_datetime(df['yyyymm'], format='%Y%m')
    df1 = pd.pivot(index=df['yyyymm'].dt.month, columns=df['yyyymm'].dt.year, values=df.visit_cnt)
           .fillna(0)
    print (df1)
    yyyymm      2011      2016
    yyyymm                    
    1        91252.0       0.0
    2       140571.0       0.0
    3       141457.0       0.0
    4       147680.0       0.0
    5       154066.0       0.0
    9            0.0  591242.0
    10           0.0  650174.0
    11           0.0  507579.0
    12           0.0  465218.0
    

    另一种解决方案类似,只是通过set_indexunstack重塑:

    df['yyyymm'] = pd.to_datetime(df['yyyymm'], format='%Y%m')
    df['year'] = df['yyyymm'].dt.year
    df['month'] = df['yyyymm'].dt.month
    df1 = df.set_index(['month','year'])['visit_cnt'].unstack(fill_value=0)
    print (df1)
    year     2011    2016
    month                
    1       91252       0
    2      140571       0
    3      141457       0
    4      147680       0
    5      154066       0
    9           0  591242
    10          0  650174
    11          0  507579
    12          0  465218
    

    最后,使用seaborn.heatmap

    import seaborn as sns
    ax = sns.heatmap(df1)
    

    【讨论】:

    • jezrael - 非常感谢
    • 很高兴可以帮助您 - 对未来的小建议 - 请添加一些代码,您尝试质疑的内容,然后不要投反对票。美好的一天。
    猜你喜欢
    • 2016-12-01
    • 2016-11-03
    • 2017-12-09
    • 2019-07-22
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    相关资源
    最近更新 更多