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

Python构建Pearson相关矩阵时报float与str不支持运算错误如何解决

错误原因

pearsonr 函数要求输入的两个序列均为数值类型,你定义的属性列表中包含model、transmission、fuelType三个字符串类型的分类变量,字段值无法直接参与数值运算,因此触发类型错误。

修复方案

方案1:仅计算数值变量的相关系数(推荐)

Pearson相关系数本身仅适用于衡量连续数值变量的线性相关程度,建议直接过滤掉非数值字段即可正常运行,同时你可以用pandas内置方法简化代码,无需手动写循环:

# 方法A:修改属性列表,仅保留数值字段后运行原逻辑
from scipy.stats import pearsonr
import numpy as np

# 过滤掉字符串类型的分类属性
attribute_list = ["year", "price", "mileage", "tax", "mpg", "engineSize"]
n = len(attribute_list)
correlation_coefficient_matrix = np.zeros((n, n))
pvalue_matrix = np.zeros((n, n))

for i in range(n):
    for j in range(n):
        if i >= j:
            x = my_data_frame[attribute_list[i]].values
            y = my_data_frame[attribute_list[j]].values
            r1, pvalue = pearsonr(x, y)
            correlation_coefficient_matrix[i,j] = r1
            pvalue_matrix[i,j] = pvalue
            if i != j:
                correlation_coefficient_matrix[j,i] = r1
                pvalue_matrix[j,i] = pvalue

print("变量列表:", attribute_list)
print("\n相关系数矩阵:\n", correlation_coefficient_matrix)
print("\nP值矩阵:\n", pvalue_matrix)
# 方法B:直接调用pandas内置方法,代码更简洁且自动跳过非数值列
# 生成相关系数矩阵
corr_matrix = my_data_frame.corr(method='pearson')
print(corr_matrix)

方案2:分类变量编码后计算

如果你确实需要把分类变量纳入计算,需要先将字符串字段编码为数值类型后再运行原逻辑:

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()

# 对字符串分类字段做标签编码
my_data_frame['model'] = le.fit_transform(my_data_frame['model'])
my_data_frame['transmission'] = le.fit_transform(my_data_frame['transmission'])
my_data_frame['fuelType'] = le.fit_transform(my_data_frame['fuelType'])

注意:无序分类变量编码后计算Pearson相关系数不具备统计意义,这类变量建议改用卡方检验或斯皮尔曼等级相关系数衡量相关性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:39:02