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

多无重叠列DataFrame的PCA处理方案咨询(Python)

针对多列不重叠DataFrame的PCA分析方案

必须分别对每个DataFrame单独执行PCA,原因很直接:你的三个DataFrame列(特征)完全不重叠,合并后没有任何共享特征,根本没法做统一的PCA——PCA的核心是分析特征间的协方差结构,没有共同特征就不存在协方差,强行合并只会得到全NaN的无效数据,删NaN自然就啥都剩不下。

单独做PCA才是合理的选择,理由如下:

  • 每个DataFrame对应不同的变量组,单独做PCA能精准提取各自变量组的核心主成分,反映每个组内部的方差规律。
  • 虽然你只有17个样本,但每个DataFrame的特征数远多于样本数,单独做PCA时可以通过保留一定方差比例的主成分(比如95%),避免提取无意义的噪声成分。

给你一段实用的Python代码示例,用sklearn来处理:

import pandas as pd
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

# 封装PCA处理函数,默认保留能解释95%方差的主成分
def run_pca_single_df(df):
    # PCA前必须标准化特征,不然尺度大的特征会主导主成分
    scaler = StandardScaler()
    scaled_features = scaler.fit_transform(df.values)
    
    # 初始化PCA,设置保留95%方差
    pca = PCA(n_components=0.95)
    pca_results = pca.fit_transform(scaled_features)
    
    # 转成DataFrame,保留原模型名称作为行索引
    pca_df = pd.DataFrame(pca_results, index=df.index)
    print(f"该DataFrame的PCA累计方差解释率: {sum(pca.explained_variance_ratio_):.2f}")
    return pca_df

# 分别处理三个DataFrame
pca_result1 = run_pca_single_df(df1)
pca_result2 = run_pca_single_df(df2)
pca_result3 = run_pca_single_df(df3)

# 如果后续需要把三个结果放一起分析,直接按行索引合并就行(因为行都是模型名称)
combined_pca_results = pd.concat([pca_result1, pca_result2, pca_result3], axis=1)

这段代码里的关键点:

  • 标准化步骤不能省,不然特征尺度差异会让PCA结果失真。
  • 设置n_components=0.95会自动选择足够的主成分来解释95%的方差,不用手动指定数量,很省心。
  • 最后合并PCA后的结果是完全可行的,因为此时的列都是各变量组压缩后的主成分,不会出现NaN。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:27:15