Pandas Pearson相关计算函数if/else判断语法问题求助
问题根因
你的函数判断逻辑失效、输出None是三个语法错误导致的:
df.corr(method='pearson')返回的是2*2的相关系数矩阵,你没有提取total_sales和目标评分的交叉相关值,直接对整个矩阵做大小比较。矩阵对角线是变量和自身的相关系数,固定为1.0,永远满足>0.7的条件,所以不管实际交叉相关值是多少,都会触发强正相关的分支。- 判断条件外层套了无意义的双层方括号
[[]],把布尔判断结果包成了嵌套列表,进一步干扰了条件判断的逻辑。 - 你把
print()的执行结果赋值给result变量,print()本身没有返回值,默认返回None,所以最后打印result必然输出None。
修正后代码
def corfunc(Platform, score_type): # 过滤目标平台、对应评分非空的样本 df5 = df_new[(df_new.platform == Platform) & (df_new[score_type].notna())][['total_sales', score_type]] # 绘制六边形分箱图 df5.plot(x=score_type, y='total_sales', kind='hexbin', gridsize=20, sharex=False, alpha=1) # 直接提取两个目标变量的Pearson相关系数浮点值,不使用整个矩阵做判断 corr_value = df5.corr(method='pearson').loc['total_sales', score_type] print(f"Pearson相关系数:{corr_value:.6f}") # 对单个相关系数值做阈值判断 if corr_value > 0.7: result = 'There is a strong positive connection' elif corr_value < -0.7: result = 'There is a strong negative connection' else: result = 'No/weak connection' print(result) # 按需返回相关系数和判断结果,避免输出None return corr_value, result
执行效果验证
执行corfunc('PS3', 'critic_score')时,函数会正确提取到0.379961的相关值,输出如下,不会再出现误判和None值:
Pearson相关系数:0.379961 No/weak connection
内容的提问来源于stack exchange,提问作者Maor Ohayon
相关产品推荐
相关产品推荐

