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

Python遍历单列表多元素生成pandas 9*9相关系数矩阵问题求助

现有数据集

Zn  Pb    Ag  Cu  Mo   Cr  Ni  Co   Ba
87   7  0.02  42   2   57  38  14  393
70   6  0.02  56   2   27  29  20  404
75   5  0.02  69   2   44  23  17  417
70   6  0.02  54   1   20  19  12  377

原有代码

def correlation_iterated(raw_data,element_concentration):

    columns = element_concentration.split()
    df1 = pd.DataFrame(columns=columns)
   
    
    data1=[]
    selected_columns = raw_data.loc[:, element_concentration.split()].columns   
    for i in selected_columns:
        for j in selected_columns:
            # another function that takes 'i' and 'j' and returns 'a'
            zipped1 = zip([i], a)
            data1.append(dict(zipped1))
            
        
        
    df1 = df1.append(data1,True)
        

    print(df1)

问题说明

  • 实际输出为81行9列,仅对应列有计算值,其余为NaN:
Zn  Pb  Ag  Cu  Mo  Cr  Ni  Co        Ba
0   1.000000 NaN NaN NaN NaN NaN NaN NaN       NaN
1   0.460611 NaN NaN NaN NaN NaN NaN NaN       NaN
2   0.127904 NaN NaN NaN NaN NaN NaN NaN       NaN
3   0.276086 NaN NaN NaN NaN NaN NaN NaN       NaN
4  -0.164873 NaN NaN NaN NaN NaN NaN NaN       NaN
..       ...  ..  ..  ..  ..  ..  ..  ..       ...
76       NaN NaN NaN NaN NaN NaN NaN NaN  0.113172
77       NaN NaN NaN NaN NaN NaN NaN NaN  0.027251
78       NaN NaN NaN NaN NaN NaN NaN NaN -0.036409
79       NaN NaN NaN NaN NaN NaN NaN NaN  0.041396
80       NaN NaN NaN NaN NaN NaN NaN NaN  1.000000

[81 rows x 9 columns] 
  • 预期输出为9行9列的结果矩阵:
Zn         Pb         Ag Cu Mo Cr Ni Co Ba
0   1.000000   0.460611   ...
1   0.460611   1.000000   ...
2   0.127904   0.111559   ...
3   0.276086   0.303925   ...
4  -0.164873  -0.190886   ...
5   0.402046   0.338073   ...
6   0.174774   0.096724   ...
7   0.165760  -0.005301   ...
8  -0.043695   0.174193   ...

[9 rows x 9 columns]

修改后代码

原代码问题为循环逻辑错误:两层循环每次仅生成含单列值的字典,追加后自然得到81行多数值为NaN的结果。调整为按行攒整行计算值再生成DataFrame即可:

import pandas as pd

def correlation_iterated(raw_data, element_concentration):
    columns = element_concentration.split()
    selected_columns = raw_data.loc[:, columns].columns
    result = []
    # 外层循环遍历行
    for i in selected_columns:
        row_data = []
        # 内层循环遍历列,攒当前行所有列的计算值
        for j in selected_columns:
            # 此处保留原有i、j计算逻辑得到a
            row_data.append(a)
        result.append(row_data)
    # 直接用二维列表生成9行9列DataFrame
    df1 = pd.DataFrame(result, columns=columns)
    print(df1)
    return df1

如果你的计算逻辑本身是求皮尔逊相关系数,可直接调用pandas内置方法,无需自行实现循环:

corr_df = raw_data[element_concentration.split()].corr()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:06:00