为什么pandas DataFrame生成的相关矩阵列数少于原数据集列数
核心原因
pandas.DataFrame.corr()方法默认仅对数值类型的列计算相关系数,所有非数值类型(包括object类字符串列、未编码的分类列等)会被自动排除,不会纳入计算。你原始DataFrame的80列中共有43列为非数值类型,因此最终只生成了37×37的相关矩阵。- 你打印的缺失值统计仅能证明数据集无空值,和列是否符合相关系数的计算要求无关,即便无缺失值,非数值列也不会参与计算。
验证方式
执行以下代码查看数据集的列类型分布,即可确认数值列总数:
print(all_data.dtypes.value_counts())
输出结果中int、float等数值类型的列数总和应当为37,剩余列均为非数值类型。
解决方案
如果需要将所有列都纳入相关系数计算,需要先对非数值列做编码转换:
- 无序分类变量可使用独热编码
pd.get_dummies()处理 - 有序分类变量可使用标签编码转换为数值格式
所有列转换为数值类型后再调用corr()方法,即可得到80×80的相关矩阵。
内容的提问来源于stack exchange,提问作者Tom Green
相关产品推荐
相关产品推荐

