如何用Polars计算DataFrame数值列的两两Pearson相关系数?
计算Polars DataFrame中数值列的两两Pearson相关系数
方法一:直接使用Polars内置的corr()方法
这是最简便高效的方式,Polars已经封装了相关矩阵的计算逻辑:
- 筛选出除
date列外的所有数值列 - 调用
corr()方法直接生成相关矩阵
示例代码:
import polars as pl # 假设你的DataFrame名为df # 筛选出所有非date列的数值列 numeric_df = df.select(pl.exclude("date")) # 计算相关矩阵 corr_matrix = numeric_df.corr() # 查看结果 print(corr_matrix)
该方法会直接返回一个以数值列为行和列的DataFrame,每个单元格对应两列的Pearson相关系数。
方法二:手动生成列对并计算(符合你的笛卡尔积思路)
如果需要更灵活的控制(比如只计算部分列对),可以手动生成所有列的笛卡尔积,再用pearson_corr表达式计算:
import polars as pl from itertools import product # 获取所有非date列的名称 numeric_cols = df.select(pl.exclude("date")).columns # 生成所有列的两两组合(包括自身与自身的组合) column_pairs = list(product(numeric_cols, repeat=2)) # 计算每对列的相关系数并重塑为矩阵 corr_df = ( df .select( # 为每对列生成对应的相关系数表达式 pl.lit(col1).alias("col1"), pl.lit(col2).alias("col2"), pl.pearson_corr(col1, col2).alias("correlation") for col1, col2 in column_pairs ) # 合并结果行 .explode(["col1", "col2", "correlation"]) # 透视成矩阵格式 .pivot(index="col1", columns="col2", values="correlation") ) print(corr_df)
注意事项
pearson_corr会自动忽略包含缺失值的行,若需处理缺失值,可先使用df.drop_nulls()或df.fill_null()预处理- 内置的
corr()方法性能更优,因为Polars会对整个矩阵计算做优化,推荐优先使用
内容的提问来源于stack exchange,提问作者seymore_strongboy
相关产品推荐
相关产品推荐

