Pandas2.2 DataFrame
Computations descriptive stats
方法 | 描述 |
---|---|
DataFrame.abs() | 用于返回 DataFrame 中每個元素的絕對值 |
DataFrame.all([axis, bool_only, skipna]) | 用于判斷 DataFrame 中是否所有元素在指定軸上都為 True |
DataFrame.any(*[, axis, bool_only, skipna]) | 用于判斷 DataFrame 中是否至少有一個元素在指定軸上為 True |
DataFrame.clip([lower, upper, axis, inplace]) | 用于截斷(限制)DataFrame 中的數值 |
DataFrame.corr([method, min_periods, …]) | 用于計算 DataFrame 中各列之間的相關系數矩陣(Correlation Matrix) |
pandas.DataFrame.corr()
pandas.DataFrame.corr()
方法用于計算 DataFrame 中各列之間的相關系數矩陣(Correlation Matrix),常用于探索變量之間的線性關系強度。默認使用皮爾遜相關系數(Pearson),也支持 Kendall 和 Spearman 等非參數方法。
一、方法簽名
DataFrame.corr(method='pearson', min_periods=1, numeric_only=False)
參數說明:
參數 | 類型 | 描述 |
---|---|---|
method | {‘pearson’, ‘kendall’, ‘spearman’} 或 callable,默認 'pearson' | 相關系數的計算方法: |
'pearson'
: 線性相關系數(適用于連續變量)'kendall'
: Kendall Tau 秩相關系數'spearman'
: Spearman 秩相關系數- 也可以傳入自定義函數(兩個 Series 輸入,返回 float) |
|min_periods
| int, 默認1
| 每對列之間至少需要多少個有效觀測值才能計算相關系數。若不足則返回 NaN。 |
|numeric_only
| bool, 默認False
| 是否只考慮數值類型列(如 int、float)。若為True
,忽略布爾、字符串等非數值列。 |
二、返回值
- 返回一個 DataFrame,表示每對列之間的相關系數,范圍在 [-1, 1] 之間:
1
表示完全正相關0
表示無線性關系-1
表示完全負相關
三、相關系數方法說明
方法 | 描述 |
---|---|
'pearson' | 衡量兩變量之間的線性相關性(適合連續數據) |
'kendall' | 基于秩次的相關性檢驗(適合小樣本或有序數據) |
'spearman' | 基于秩次的非參數相關性(適合非正態分布數據) |
四、使用示例及結果
示例1:默認方法(Pearson)
import pandas as pddf = pd.DataFrame({'A': [1, 2, 3, 4, 5],'B': [2, 4, 6, 8, 10],'C': [5, 4, 3, 2, 1]
})
計算 Pearson 相關系數:
result = df.corr()
print(result)
輸出:
A B C
A 1.000000 1.000000 -1.000000
B 1.000000 1.000000 -1.000000
C -1.000000 -1.000000 1.000000
解釋:
- 列 A 與 B 完全正相關(+1)
- 列 A 與 C 完全負相關(-1)
示例2:使用 Spearman 方法
result = df.corr(method='spearman')
print(result)
輸出:
A B C
A 1.0 1.0 -1.0
B 1.0 1.0 -1.0
C -1.0 -1.0 1.0
解釋:
- 由于數據是單調遞增/遞減,Spearman 與 Pearson 結果一致。
示例3:包含 NaN 值時設置 min_periods
import numpy as npdf_with_nan = pd.DataFrame({'X': [1, 2, np.nan, 4, 5],'Y': [np.nan, 2, 3, 4, 5],'Z': [5, 4, 3, 2, 1]
})# 設置 min_periods=3
result = df_with_nan.corr(min_periods=3)
print(result)
輸出:
X Y Z
X 1.000000 1.000000 -1.000000
Y 1.000000 1.000000 -1.000000
Z -1.000000 -1.000000 1.000000
解釋:
- 雖然有缺失值,但每對列間仍有足夠的有效觀測值(≥3),因此仍能計算出相關系數。
示例4:使用自定義相關函數(如互信息)
from scipy.stats import pearsonrdef custom_corr(x, y):return pearsonr(x, y)[0]result = df.corr(method=custom_corr)
print(result)
輸出:
A B C
A 1.000000 1.000000 -1.000000
B 1.000000 1.000000 -1.000000
C -1.000000 -1.000000 1.000000
解釋:
- 使用
scipy.stats.pearsonr
自定義相關函數,效果與默認相同。
示例5:僅保留數值列(numeric_only=True
)
df_mixed = pd.DataFrame({'A': [1, 2, 3],'B': ['low', 'medium', 'high'],'C': [4.0, 5.0, 6.0]
})result = df_mixed.corr(numeric_only=True)
print(result)
輸出:
A C
A 1.0 1.0
C 1.0 1.0
解釋:
- 列 B 是字符串類型,被自動忽略。
- 只對數值列 A 和 C 進行相關分析。
五、適用場景
場景 | 描述 |
---|---|
特征選擇 | 分析特征之間的共線性,避免多重共線性問題 |
數據探索 | 快速了解變量之間的線性關系強弱 |
可視化輔助 | 配合熱力圖(heatmap)展示變量相關性 |
模型診斷 | 檢查輸入變量是否具有預測能力或冗余性 |
六、注意事項
- 只適用于數值型列(int、float),非數值列默認參與運算時會報錯(除非設置
numeric_only=True
) NaN
值會被自動跳過,不影響計算method
支持傳入任意兩個 Series 的函數進行自定義相關性計算- 對異常值敏感(尤其 Pearson),建議先做標準化或去極值處理
七、總結
特性 | 描述 |
---|---|
功能 | 計算 DataFrame 各列之間的相關系數矩陣 |
默認方法 | Pearson 線性相關系數 |
支持方法 | Pearson、Kendall、Spearman、自定義函數 |
NaN 處理 | 自動跳過,可通過 min_periods 控制最小樣本數 |
是否修改原數據 | 否,返回新 DataFrame |
適用類型 | 數值型列(int、float) |
corr()
是數據分析中非常關鍵的方法之一,廣泛應用于變量關系探索、特征工程、模型優化等多個環節。