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

多DataFrame绘制相关系数热力图报ValueError的原因及修复方法

错误原因与修复方案

错误原因

  • 索引对齐逻辑冲突:你将三个表的t列分别修改为全表统一的类别值1、2、3后,仍将t设为索引进行按列拼接,此时单表内所有行的索引完全重复。pd.concat按列拼接时默认按索引值对齐行,会将三个表的索引取并集后逐值匹配,最终拼接后的行数为三个表行数之和(你场景中为60行),和原有代码预期的18行(原t列的唯一值数量)完全不符,因此抛出形状不匹配错误。
  • 业务逻辑矛盾:原t列的作用是作为行对齐的唯一标识,将其修改为类别标签后就失去了行对齐的能力,强行按原有逻辑拼接得到的结果不具备计算相关系数的统计意义。

修复方案

根据你的实际需求选择对应方案即可:

方案1:保留原行对齐逻辑(推荐,相关系数计算结果有统计意义)

如果仍需要按原有观测维度对齐行计算相关系数,不要修改原用于对齐的t列,额外新增类别列存储1/2/3的标签即可,示例代码如下:

import pandas as pd
import seaborn as sns

# 新增类别列,不修改原有t列的对齐作用
X['category'] = 1
Y['category'] = 2
Z['category'] = 3

# 按原有逻辑拼接:t设为索引,按列拼接并新增来源层级区分列
concat_df = pd.concat(
    [X.set_index('t'), Y.set_index('t'), Z.set_index('t')],
    axis=1,
    keys=['X', 'Y', 'Z']
)

# 计算相关系数并绘制热力图
corr_matrix = concat_df.corr(numeric_only=True)
sns.heatmap(corr_matrix, annot=True, cmap='RdBu_r')

方案2:不需要行对齐,仅计算列的皮尔逊相关

如果不需要按原有观测对齐,可以给各表的列加上来源前缀后按行索引位置对齐,短表缺失的行自动补NaN,计算相关系数时会自动忽略成对的空值,示例代码如下:

import pandas as pd
import seaborn as sns

# 给各表非t列加来源前缀,避免列名重复
X_prefixed = X.drop('t', axis=1).add_prefix('X_')
Y_prefixed = Y.drop('t', axis=1).add_prefix('Y_')
Z_prefixed = Z.drop('t', axis=1).add_prefix('Z_')

# 按列拼接,自动按行位置对齐
concat_df = pd.concat([X_prefixed, Y_prefixed, Z_prefixed], axis=1)

# 计算相关系数并绘图
corr_matrix = concat_df.corr(numeric_only=True)
sns.heatmap(corr_matrix, annot=True, cmap='RdBu_r')

内容的提问来源于stack exchange,提问作者Rahul Paul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:36:01