Pandas问卷数据相关系数表出现字母的原因及解决方法咨询
Pandas生成相关系数表出现字母/异常符号的解决办法
为啥会出现这种情况?
- 数据混有非数值内容:问卷导出的数据常带文字选项、"未填写"这类标记,Pandas计算相关系数时无法识别,就会返回异常值或显示奇怪符号。
- 存在空值(NaN)或无穷值(inf):数据大量缺失、或计算时出现除以零的情况,会生成
NaN或inf,这些在表格里看起来像字母/特殊字符。 - 添加了显著性标记:如果用了能输出p值的计算方法,还手动给显著相关系数加了
*/**这类标记,那表格里的符号是你自己加的,不是错误。
怎么解决?
1. 先把数据清洗干净
- 检查数据类型:运行
df.dtypes确认参与计算的列都是int或float类型。 - 转换非数值内容:用代码把不能转成数字的内容转为
NaN,再填充或删除:import pandas as pd import numpy as np # 将非数值转为NaN df = df.apply(pd.to_numeric, errors='coerce') # 用均值填充空值(也可选用中位数,或直接删除缺失行/列) df = df.fillna(df.mean()) # 处理无穷值 df = df.replace([np.inf, -np.inf], np.nan).fillna(df.mean()) - 删除缺失过多的列:如果某列空值占比过高,直接运行
df = df.drop(columns=['问题列名'])删掉即可。
2. 检查计算代码
- 若用的是默认的
df.corr()(皮尔逊相关系数),只会返回数值或NaN,出问题肯定是数据没洗干净。 - 若手动添加了显著性标记(如下方代码),
*/**是自定义的标记,不想显示就删掉标记逻辑,直接返回数值:from scipy.stats import pearsonr def corr_with_p(x, y): corr, p = pearsonr(x, y) # 移除下面的标记逻辑即可返回纯数值 if p < 0.01: return f"{corr:.2f}**" elif p < 0.05: return f"{corr:.2f}*" else: return f"{corr:.2f}" corr_table = df.corr(method=corr_with_p)
3. 验证结果
- 运行
df.isna().sum()查看每列空值数量,明确清洗方向。 - 生成相关表后运行
corr_table.info(),若存在object类型的列,说明还有非数值内容,需要再次清洗。
内容的提问来源于stack exchange,提问作者Anusha
相关产品推荐
相关产品推荐

