使用df.corr()计算数据集相关性异常:Jupyter显(_)、Spyder显NaN
录取数据集相关性计算异常的解决方法
可能原因
- 数据集中存在非数值类型列,或数值列被误识别为字符串类型
- 部分列缺失值过多,导致相关性计算无法正常进行
- 存在方差为0的列(所有值相同),这类列无法计算有效相关性
解决步骤
1. 检查数据基础信息
先确认数据结构、缺失值和数值特征的分布:
import pandas as pd df = pd.read_csv("Admission_data.csv") # 查看各列数据类型和非空值数量 print(df.info()) # 统计各列缺失值数量 print(df.isnull().sum()) # 查看数值列的统计描述(确认是否有方差为0的列) print(df.describe())
2. 修复数值列格式错误
如果发现存在object类型的数值列,尝试强制转换为数值类型(无法转换的会设为NaN):
for col in df.columns: try: df[col] = pd.to_numeric(df[col], errors='coerce') except Exception: continue
3. 处理缺失值
根据缺失值情况选择填充或删除:
# 用数值列的均值填充缺失值 df = df.fillna(df.mean(numeric_only=True)) # 若某列缺失值占比过高,直接删除(示例:缺失值超过50%) df = df.drop(df.columns[df.isnull().sum()/len(df) > 0.5], axis=1)
4. 删除方差为0的列
这类列所有值相同,无法计算有效相关性:
# 筛选出方差大于0的数值列 valid_cols = df.columns[df.var(numeric_only=True) > 0] df = df[valid_cols]
5. 重新计算相关性
完成上述处理后,重新运行相关性计算:
correlations = df.corr(numeric_only=True) print(correlations)
内容的提问来源于stack exchange,提问作者Seyfulla Mammadov
相关产品推荐
相关产品推荐

