首页 > 解决方案 > scipy.stats.pearsonr 抱怨操作数类型 -: 'tuple' 和 'float'

问题描述

数据框

我正在尝试计算 numpy 二维数组的两列之间的相关性。数组看起来像:


a = np.array([[5.1, 3.5, 1.4, 0.2],
        [4.9, 3. , 1.4, 0.2],
        [4.7, 3.2, 1.3, 0.2],
        [4.6, 3.1, 1.5, 0.2]])

所以第一列和第三列之间的相关性计算为:


import scipy
x, y = scipy.stats.pearsonr(a[:,0], a[:,2])

但是,它抱怨:


unsupported operand type(s) for -: 'tuple' and 'float'

这意味着,例如,正在发生以下情况:


print((0.1,0.2) - 0.3)
TypeError: unsupported operand type(s) for -: 'tuple' and 'float'

更新:完整代码:


import pandas as pd
from scipy import stats
import numpy as np
a = pd.read_csv("src/iris.csv").drop('species', axis=1).values
def lengths():
    x, y = stats.pearsonr(a[:,0],a[:,2])
    return x, y
print(lengths())

标签: pythonscipy

解决方案


这看起来像是您的数据的问题。将您的代码与来自vega-datasets的另一个 Iris 数据帧一起使用,我在计算相关性时没有问题:

import pandas as pd
from scipy import stats
import numpy as np
import vega_datasets as vd

a = vd.data.iris().drop('species', axis=1).values
def lengths():
    x, y = stats.pearsonr(a[:,0],a[:,2])
    return x, y
print(lengths())

返回

(0.8717537758865832, 1.0386674194497525e-47)

推荐阅读