pandas的df.corr(method='spearman')仅识别sex列无法生成全特征相关矩阵求助
问题排查与解决步骤
pandas的corr()方法默认仅会计算数值类型列的相关系数,出现仅返回sex列结果的核心原因是其余16列均为非数值类型,或包含大量无法识别为数值的异常内容,可按以下步骤处理:
第一步:确认各列数据类型
运行代码输出所有列的类型,排查非数值列:
print(df_normalized.dtypes)
如果除sex外的其余列显示为object/string类型,即可确认是数据类型问题。
第二步:排查列内异常值
预期为数值的列被识别为非数值,一般是存在空格、特殊字符、字符串格式的空值等异常内容,可运行代码定位异常:
# 替换为你要检查的列名,输出该列所有无法转换为数值的行 col_to_check = "目标列名" invalid_rows = df_normalized[~df_normalized[col_to_check].apply(lambda x: str(x).replace('.','',1).isdigit())] print(invalid_rows)
第三步:批量转换为数值类型
将所有需要计算相关性的列强制转换为数值类型,无法转换的内容会自动设为NaN:
import pandas as pd # 批量转换所有列,不需要转换的列可手动过滤 for col in df_normalized.columns: df_normalized[col] = pd.to_numeric(df_normalized[col], errors='coerce')
第四步:重新计算相关系数
转换完成后再次运行计算代码即可得到完整的17×17相关矩阵:
spearman_corr_matrix = df_normalized.corr(method='spearman') print(spearman_corr_matrix)
注意事项
- 如果转换后列的NaN占比超过30%,建议先通过填充、删除等方式处理缺失值再计算相关性,避免结果偏差
- 若
sex列为分类字符串(如男/女),需要先做数值编码(如0/1映射)后再参与相关性计算
内容的提问来源于stack exchange,提问作者zakhanjani
相关产品推荐
相关产品推荐

