调用pandas Series.corr()求皮尔逊相关系数报float无shape属性原因
报错原因及解决方案
核心报错原因
你提取的df['a']和df['b']两列的数据类型均为object而非数值类型(int/float),这是报错的根本诱因:
scipy.stats.pearsonr处理输入时会自动对内容为合法数字的object类型序列做隐式类型转换,因此可以正常输出结果- pandas的
Series.corr方法内部的数值校验逻辑不会自动转换object类型,计算过程中会把object类型的元素识别为单个float标量,调用shape属性时就触发了'float' object has no attribute 'shape'的报错
索引影响说明
Country作为索引不会导致该错误,pandas的corr计算仅会依据索引对齐两个序列的取值,只要两个序列的索引对应、取值可转换为数值,索引类型不会影响计算结果。
解决方案
先将两列数据显式转换为数值类型,再调用corr方法即可:
# 转换为数值类型,无法转换的内容会被置为NaN col1 = pd.to_numeric(df['a'], errors='coerce') col2 = pd.to_numeric(df['b'], errors='coerce') # 计算皮尔逊相关系数,自动忽略NaN值 corr = col1.corr(col2, method="pearson")
内容的提问来源于stack exchange,提问作者Matthew Tomsho
相关产品推荐
相关产品推荐

