如何从pandas DataFrame获取相关系数并解决KeyError: (1, 0)报错
报错根因
pandas的corr()方法返回的是带行列标签的DataFrame对象,而非Numpy数组,不能直接使用整数位置元组(1,0)进行索引,这是触发KeyError的核心原因。
解决方案
你可以从三种常用索引方式中任选一种解决取值问题:
- 用
iloc按整数位置取相关系数矩阵的值
return s.corr().iloc[1,0]
- 先转为Numpy数组再按位置取值
return s.corr().to_numpy()[1,0]
- 按列名索引(更稳妥,不会因为列顺序调整出错)
corr_matrix = s.corr() return corr_matrix.loc['A1', 'A3']
完整功能实现
以下是满足「A1与A3相关系数绝对值大于0.6时删除A3列」需求的完整可运行代码,同时清理了原代码中冗余的导入语句:
import pandas as pd import numpy as np def main(): df = pd.read_csv('A1-dm.csv') processed_df = handle_high_correlation(df) print("处理后的数据集列:", processed_df.columns.tolist()) def handle_high_correlation(df): # 计算A1和A3的皮尔逊相关系数 a1_a3_corr = df[['A1', 'A3']].corr().loc['A1', 'A3'] print(f"A1与A3的相关系数为:{round(a1_a3_corr, 4)}") # 满足阈值则删除A3列 if abs(a1_a3_corr) > 0.6: return df.drop(columns=['A3']) return df if __name__ == "__main__": main()
运行你提供的样例数据集时,A1与A3的相关系数接近1,会触发删除条件,最终输出的数据集将不包含A3列。
内容的提问来源于stack exchange,提问作者Evan Gertis
相关产品推荐
相关产品推荐

