使用hist2d绘制二维直方图遇类型错误:float与method无法比较
二维直方图绘制报错:TypeError: '>=' not supported between instances of 'float' and 'method'
问题背景
尝试使用DataFrame中mean和relevance两列数据,调用matplotlib.pyplot.hist2d绘制二维直方图,相关数据、代码及报错如下:
数据片段
relevance ratio mean 0 0.635266925998546 0.48717948717948717 2.8293641135319985 1 0.8024759680807747 0.5977011494252874 4.769829806901302 2 0.7938352843184088 0.6265060240963856 5.063955003405357 3 0.8270877609099303 0.41935483870967744 12.29401084132898 4 0.7695503203351798 0.44776119402985076 8.510369905054274 5 0.8513853897448349 0.28695652173913044 13.169903248451313 6 0.8544935485775926 0.12658227848101267 12.063579823506643 7 0.8395833284774789 0.19047619047619047 9.372998776898859 8 0.8796642155254841 0.16883116883116883 9.218498721423206 9 0.7414921294548873 0.0 8.658189626458995 10 0.5463891924615218 0.07575757575757576 3.3982228628036566
执行代码
import matplotlib.pyplot as plt plt.hist2d(data.mean, data.relevance, bins=5, cmap=plt.cm.Blues)
报错信息
TypeError: '>=' not supported between instances of 'float' and 'method'
错误原因
问题出在data.mean的写法上:Pandas DataFrame内置了mean()方法用于计算均值,当你的列名恰好和这个内置方法名重名时,使用点取式(data.mean)会返回方法对象,而不是你想要的列数据。而data.relevance是正常的float类型列数据,plt.hist2d在处理时会尝试将方法对象与float值做比较,从而触发该类型错误。
解决方案
改用方括号索引的方式访问mean列,避免与内置方法混淆:
import matplotlib.pyplot as plt plt.hist2d(data['mean'], data.relevance, bins=5, cmap=plt.cm.Blues) # 也可以用 data.loc[:, 'mean'] 明确指定列
内容的提问来源于stack exchange,提问作者zorals
相关产品推荐
相关产品推荐

