如何在Pandas中传入指定列计算Pearson相关系数及代码报错排查
问题分析与修正方案
核心错误
你的代码报错的直接原因是错误使用numpy数组的索引方式访问pandas DataFrame的列:a[:,0]和a[:,1]是numpy数组的切片写法,不适用于DataFrame,会触发类型不匹配错误。
修正步骤
- 替换错误的列索引方式:
- 可以用
.iloc[:,0]/.iloc[:,1]按位置取列,或者更直观地直接用列名(如a['HAD_CPOX'])获取数据。
- 可以用
- 移除不必要的排序操作:计算Pearson相关系数不需要对索引排序,
a.sort_index(inplace=True)可以删除。
修正后的代码
import pandas as pd from scipy import stats # 读取指定列并移除含NaN的行 df = pd.read_csv('NISPUF17.csv', usecols=['HAD_CPOX', 'P_NUMVRC']).dropna() # 过滤HAD_CPOX不等于77的行 df = df.query('HAD_CPOX != 77') def calculate_pearson_corr(): # 直接通过列名获取数据传入计算函数 corr_result = stats.pearsonr(df['HAD_CPOX'], df['P_NUMVRC']) return corr_result print(calculate_pearson_corr())
补充说明
stats.pearsonr返回的是包含相关系数和p值的元组,这是该函数的正常返回格式,不属于类型错误。- 你做的
dropna+过滤77的清洗步骤已经处理了缺失值,这部分逻辑是有效的。
内容的提问来源于stack exchange,提问作者Vani
相关产品推荐
相关产品推荐

