dataframe.corr()
是 Pandas 中用于计算 列与列之间的相关系数 的方法,常用于分析数据集中变量之间的线性关系。以下是其详细用法和解释:
1. 基本语法
df.corr(
method='pearson', # 相关系数计算方法
min_periods=1, # 计算所需的最小样本数
numeric_only=False # 是否只计算数值列(Pandas 2.0+ 默认 True)
)
参数说明
参数 | 说明 |
---|---|
method | 计算相关系数的方法,可选: • 'pearson' (默认):皮尔逊相关系数(线性相关)• 'spearman' :斯皮尔曼秩相关系数(单调相关)• 'kendall' :肯德尔秩相关系数(有序数据相关) |
min_periods | 计算相关系数所需的最小有效样本数,低于此值返回 NaN |
numeric_only | 是否只计算数值型列的相关系数(Pandas 2.0+ 默认为 True ) |
2. 返回值
返回一个 对称的相关系数矩阵(DataFrame),其中:
- 行和列:均为 DataFrame 的列名。
- 值:相关系数(范围
[-1, 1]
):1
:完全正相关-1
:完全负相关0
:无线性相关
3. 使用示例
示例数据
import pandas as pd
data = {
'A': [1, 2, 3, 4, 5],
'B': [5, 4, 3, 2, 1], # 完全负相关
'C': [1, 3, 2, 5, 4], # 部分正相关
'D': ['X', 'Y', 'X', 'Y', 'X'] # 非数值列(默认不计算)
}
df = pd.DataFrame(data)
(1) 计算所有数值列的相关系数
corr_matrix = df.corr()
print(corr_matrix)
输出:
A B C
A 1.0 -1.0 0.8
B -1.0 1.0 -0.8
C 0.8 -0.8 1.0
A
和B
完全负相关(-1.0
)。A
和C
高度正相关(0.8
)。
(2) 使用 Spearman 方法
df.corr(method='spearman')
(3) 仅计算部分列的相关系数
df[['A', 'B']].corr() # 只计算 A 和 B 的相关性
(4) 过滤高相关性列
# 找出与 A 列相关性 > 0.5 的列
target_corr = corr_matrix['A'][corr_matrix['A'] > 0.5]
print(target_corr) # 输出: A 1.0, C 0.8
4. 可视化相关系数矩阵
用 seaborn.heatmap()
可以直观展示相关性:
import seaborn as sns
import matplotlib.pyplot as plt
sns.heatmap(df.corr(), annot=True, cmap='coolwarm')
plt.show()
- 红色表示正相关,蓝色表示负相关。
annot=True
显示数值。
5. 注意事项
-
非数值列
- 默认
numeric_only=False
时,非数值列会被忽略(Pandas 2.0+ 默认True
)。 - 如果包含非数值列,需先过滤:
df.select_dtypes(include=['number']).corr()
- 默认
-
缺失值处理
corr()
会自动跳过NaN
值,但样本过少可能导致结果不可靠。
-
相关性 ≠ 因果关系
- 即使两个变量高度相关,也不代表它们有直接因果关系。
6. 不同方法的适用场景
方法 | 适用场景 | 特点 |
---|---|---|
Pearson | 连续数据,线性关系 | 对异常值敏感 |
Spearman | 有序数据,单调关系 | 基于排名,不受异常值影响 |
Kendall | 小样本有序数据 | 计算成本高 |
总结
df.corr()
是分析特征间相关性的核心工具。- 默认使用 Pearson 方法,可通过
method
切换。 - 结合可视化(如热力图)可以更直观地理解数据关系。
- 注意非数值列和缺失值的影响。