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

使用Pandas的corr()遇警告,求替代方法及手动实现方案

Pandas corr() 警告处理及关联关系计算替代方案

先解决FutureWarning警告

你遇到的警告是因为Pandas即将修改corr()的numeric_only默认值,直接指定该参数就能消除警告,同时确保只计算数值列的相关系数:

import pandas as pd

df = pd.read_csv('Data.csv')
# 指定numeric_only=True,明确只处理数值列
print(df.corr(numeric_only=True))

替代corr()的方法

1. 使用NumPy的corrcoef

Pandas的corr()底层依赖NumPy实现,你可以直接用numpy.corrcoef来计算,需要注意先提取数值列并转置(因为NumPy默认按行处理变量):

import pandas as pd
import numpy as np

df = pd.read_csv('Data.csv')
# 筛选数值列
numeric_cols = df.select_dtypes(include=['number'])
# 计算相关系数矩阵,转置后匹配DataFrame的列顺序
corr_matrix = np.corrcoef(numeric_cols.T)
# 转换成DataFrame方便查看
corr_df = pd.DataFrame(corr_matrix, index=numeric_cols.columns, columns=numeric_cols.columns)
print(corr_df)

2. 使用SciPy的pearsonr(逐对计算)

如果需要更精细地控制每对变量的相关系数计算,可以用scipy.stats.pearsonr,它会返回相关系数和p值:

import pandas as pd
from scipy.stats import pearsonr
import itertools

df = pd.read_csv('Data.csv')
numeric_cols = df.select_dtypes(include=['number']).columns
corr_results = {}

# 遍历所有列对组合
for col1, col2 in itertools.combinations(numeric_cols, 2):
    corr, p_value = pearsonr(df[col1], df[col2])
    corr_results[(col1, col2)] = {'corr': corr, 'p_value': p_value}

# 转换成DataFrame展示
corr_df = pd.DataFrame.from_dict(corr_results, orient='index')
print(corr_df)

手动实现相关系数计算

可以基于皮尔逊相关系数的公式手动实现,核心是计算协方差和标准差:
皮尔逊相关系数公式:$r = \frac{\text{cov}(X,Y)}{\sigma_X \sigma_Y}$,其中协方差$\text{cov}(X,Y) = \frac{1}{n-1}\sum_{i=1}^{n}(X_i-\bar{X})(Y_i-\bar{Y})$,$\sigma$为样本标准差。

import pandas as pd
import numpy as np

def manual_corr(df):
    # 筛选数值列并标准化(减去均值)
    numeric_df = df.select_dtypes(include=['number'])
    centered = numeric_df - numeric_df.mean()
    n = len(centered)
    
    # 计算协方差矩阵
    cov_matrix = (centered.T @ centered) / (n - 1)
    # 计算各列的标准差
    stds = np.sqrt(np.diag(cov_matrix))
    # 计算相关系数矩阵:协方差除以对应标准差的乘积
    corr_matrix = cov_matrix / np.outer(stds, stds)
    
    return pd.DataFrame(corr_matrix, index=numeric_df.columns, columns=numeric_df.columns)

df = pd.read_csv('Data.csv')
print(manual_corr(df))

内容的提问来源于stack exchange,提问作者Elixir0101

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:20:31