You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行热力图代码报错:无法将'Switzerland'转为float求助

问题排查与修复建议

问题原因

df.corr() 仅能计算数值型特征的相关性系数,你的DataFrame中存在包含字符串(如'Switzerland')的列,这类非数值型数据无法参与相关性计算,直接执行会触发"无法将字符串转为浮点数"的错误。

修复方案

方案1:仅保留数值型列计算相关性

筛选出数据中的数值型字段,再进行相关性计算和热力图绘制:

# 筛选DataFrame中的数值型列(整数、浮点数类型)
numeric_df = df.select_dtypes(include=['int64', 'float64'])

# 重新绘制热力图
f, ax = plt.subplots(figsize=(10, 10))
sns.heatmap(numeric_df.corr(), annot=True, linewidths=.5, fmt='.1f', ax=ax)
plt.show()

方案2:对类别型字符串列编码后再计算

如果需要保留类别型列的相关性信息,可以将字符串转为数值后再计算:

  • 标签编码(适合有序类别,如"低/中/高"):
from sklearn.preprocessing import LabelEncoder

# 复制原数据,避免修改原始数据集
encoded_df = df.copy()
# 遍历所有字符串类型列进行编码
for col in encoded_df.select_dtypes(include=['object']).columns:
    encoded_df[col] = LabelEncoder().fit_transform(encoded_df[col])

# 绘制热力图
f, ax = plt.subplots(figsize=(10, 10))
sns.heatmap(encoded_df.corr(), annot=True, linewidths=.5, fmt='.1f', ax=ax)
plt.show()

注意:标签编码会给不同类别分配连续数值,可能引入不存在的顺序关系。如果是无序类别(如国家名称),更推荐使用独热编码,但会增加数据列数,需根据数据规模选择。

内容的提问来源于stack exchange,提问作者nurul nadzirah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 22:47:34