TypeError:输入类型不支持 ufunc 'isnan' - seaborn Heatmap

Posted

技术标签:

【中文标题】TypeError:输入类型不支持 ufunc \'isnan\' - seaborn Heatmap【英文标题】:TypeError: ufunc 'isnan' not supported for the input types, - seaborn HeatmapTypeError:输入类型不支持 ufunc 'isnan' - seaborn Heatmap 【发布时间】:2017-09-17 07:11:34 【问题描述】:

当我尝试绘制 seaborn 热图时出现错误

TypeError: 输入类型不支持 ufunc 'isnan',根据转换规则 ''safe'' 无法安全地将输入强制转换为任何支持的类型

我的代码如下

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

df = pd.read_table(r"C:\Results.CST", sep='\s+',header=11, engine = 'python')
df2 = cridim[['Bottom','Location_X','Location_Y',]]  # Bottom , location X and Location  Y are my column labels
df3 = df2.pivot('Location_X','Location_Y','Bottom') # create pivot table for results

plt.figure(figsize=(15,15)) 
pivot_table = df3
plt.xlabel('X',size = 10) 
plt.ylabel('Y',size = 10) 
plt.title('btm CD',size = 10) 
sns.heatmap(pivot_table, annot=False, fmt=".1f", linewidths = 0.5, square = True, cmap = 'RdYlBu', vmin=2900, vmax = 3500) 
plt.show()

在我的数据中由77行77列组成,其中只有651个有数据,其他空坐标在dataframe中表示为None

seaborn heatmap 可以绘制多少数据有限制吗?

我不知道为什么会出现上述错误,我已将其写入 csv 文件,结果正常。

此外,我尝试将值替换为 '0' 和空字符串,但它仍然返回 Typeerror

【问题讨论】:

问题解决,我发现在列中,有一个 NaN 值,使用 dropna 和 fillna 不起作用,我决定全部使用数字(在这里@ 987654321@) 【参考方案1】:

当您尝试使用 seaborn 绘制图形时会发生此错误,并且某些值不是数字。

seaborn 尝试将所有数据强制转换为数字,但有时会出现此错误。解决方案是确保数据中没有 NaN 或字符串。

在调用 seaborn 图形库之前尝试使用 df.astype(float)。确保您也没有任何 NaN。

【讨论】:

【参考方案2】:

要添加到@xiaxio 的答案,如果您以编程方式调用它并想要检查数据是否为数字类型,您可以使用if not pd.to_numeric(df[some_column], errors='coerce').isna().any(): return 或类似的东西。

【讨论】:

【参考方案3】:

在我的例子中,DataFrame 没有 Nan 值,但数据类型是 object 类型。对我有用的是使用df = df.astype(float) 强制数据浮动。然后可以使用 seaborn 热图进行绘图。

【讨论】:

以上是关于TypeError:输入类型不支持 ufunc 'isnan' - seaborn Heatmap的主要内容,如果未能解决你的问题,请参考以下文章

输入类型不支持 ufunc 'isnan'

尝试集成函数给出“ufunc 循环不支持符号类型的参数 0”

在使用所有可能的预测变量拟合模型时,它会抛出此错误 TypeError: ufunc 'isfinite' not supported

带有 ufunc bitwise_xor 的 TypeError

Pearsonr:TypeError:没有找到与指定签名和转换匹配的循环,用于 ufunc add

Scikit.learn auc 函数 TypeError