Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 迭代两个数据帧中的列以估计相关性和p值_Python 3.x_Pandas_Dataframe_Correlation - Fatal编程技术网

Python 3.x 迭代两个数据帧中的列以估计相关性和p值

Python 3.x 迭代两个数据帧中的列以估计相关性和p值,python-3.x,pandas,dataframe,correlation,Python 3.x,Pandas,Dataframe,Correlation,我试图从两个数据帧的对应列估计皮尔逊相关系数和p值。到目前为止,我成功地编写了这段代码,但它只提供了最后几列的结果。需要有关此代码的帮助。另外,希望将输出保存在新的数据帧中 import os import pandas as pd import scipy as sp import scipy.stats as stats df_1 = pd.DataFrame(pd.read_excel('15_Oct_Yield_A.xlsx')) df_2= pd.DataFrame(pd.read

我试图从两个数据帧的对应列估计皮尔逊相关系数和p值。到目前为止,我成功地编写了这段代码,但它只提供了最后几列的结果。需要有关此代码的帮助。另外,希望将输出保存在新的数据帧中

import os
import pandas as pd
import scipy as sp
import scipy.stats  as stats

df_1 = pd.DataFrame(pd.read_excel('15_Oct_Yield_A.xlsx'))
df_2= pd.DataFrame(pd.read_excel('Oct_Z_index.xlsx'))

for column in df_1.columns[1:]:
    for column in df_2.columns[1:]:
        x = (df_1[column])
        y = (df_2[column])
    correl = stats.pearsonr(x, y)

您的循环设置在几个测量值上不正确。。。在这两个for循环中使用相同的变量名,这将导致问题。此外,您正在计算内部循环之外的
correl
。。。等等

您要做的是使用1个循环在列上循环,假设两个数据帧具有相同的列名。如果没有,您将需要采取额外的步骤来查找公共列名,然后对它们进行迭代

像这样的方法应该会奏效:

import os
import pandas as pd
import scipy as sp
import scipy.stats  as stats

df_1 = pd.DataFrame({   'A':    ['dog', 'pig', 'cat'],
                        'B':    [0.25, 0.50, 0.75],
                        'C':    [0.30, 0.40, 0.90]})
df_2 = pd.DataFrame({   'A':    ['bird', 'monkey', 'rat'],
                        'B':    [0.20, 0.60, 0.90],
                        'C':    [0.80, 0.50, 0.10]})

results = dict()
for column in df_1.columns[1:]:
    correl = stats.pearsonr(df_1[column], df_2[column])
    results[column] = correl

print(results)

谢谢你指出我犯的错误。这个解决方案很好用!