使用矩阵绘制热力图时报错 Cannot convert fill_value nan to dtype int32

博主分享了在使用Pandas生成矩阵并利用Seaborn绘制热力图时遇到的问题。在尝试通过设置mask移除矩阵中的零值时遇到了错误,原因是尝试将Nan值填充到整型矩阵中。解决方案是删除定义矩阵时的dtype=np.int参数,从而成功绘制出不包含零值的热力图。此篇博客记录了这一过程并提醒读者注意数据类型与Nan值处理的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一次写这个,不知道发出来长什么样

问题描述

我根据pandas里的数据生成了一个矩阵,想用这个矩阵来绘制一个热力图,如下图这样在这里插入图片描述
但是我想去掉里面这些太多不需要的‘0’

生成矩阵

这个当然不是用来教画图的,只是简单说一下我当时的经历
我用如下代码生成一个矩阵阵,这个矩阵就和上图看到的一样,

o_matrix = np.zeros(matrix_shape,dtype=np.int)
o_matrix[temp['SLATCOL'],temp['SLONCOL']] = temp['VehicleNum']
生成热力图
sns.heatmap(o_matrix,
            ax = ax,
            annot = True,
            mask=o_matrix < 1,	# 小于1的元素会不显示
            cbar=True,cbar_kws={"shrink": 0.6},
            linewidths = .2,
            xticklabels = True,
            yticklabels = True,
            square = True,
            cmap = "Purples").invert_yaxis()
问题来了

因为当我在热力图那段代码里加了有注释的那一行(也就是mask那一行)后就报错了在这里插入图片描述

所以我以为问题是那个参数传的有问题,百度了一下发现应该就是这样写的,问题应该不在这。

问题原因

因为我没搜到解决方法,我就自己仔细看了一下,它的大意应该是不能将Nan填到dtype int32的numpy矩阵里。然后我估计问题应该是出在了矩阵的dtype上,因为我上面在定义矩阵时用了dtype=np.int这一参数,我的目的是将里面的数全转换成整型,这样里面的每个元素后面就不会带小数点了,下面是加上这一句和不加的区别
这是加上后的,0后面没有小数点,表示整型这是不加的,每个0后面都有一个小数点,表示这是浮点数
本来只是为了好看点,但没想到就这又困扰了我两个小时,真是划不来。

问题解决

所以我把那一段参数删了一下就好了,也就是现在这样

o_matrix = np.zeros(matrix_shape) #,dtype=np.int
o_matrix[temp['SLATCOL'],temp['SLONCOL']] = temp['VehicleNum']

然后再生成热力图,就基本达到我的要求了,里面的0都没了
在这里插入图片描述

上面是我学数据处理时在网上下的数据,当然这都不重要,重要的是我发了第一篇博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值