You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 19:37:29