Python 当np.corrcoef()返回值时,除非数据集中有nan,否则df.corr()将返回nan
我的问题与非常相似,但中给出的解决方案不适用于我的数据Python 当np.corrcoef()返回值时,除非数据集中有nan,否则df.corr()将返回nan,python,python-2.7,numpy,dataframe,correlation,Python,Python 2.7,Numpy,Dataframe,Correlation,我的问题与非常相似,但中给出的解决方案不适用于我的数据dtypes:float64(2)和descripe()返回非空float64 我将pandas:0.19.0与python2.7一起使用 我有两个数据帧,其中一列为非空浮点数据,称为WindSp\u mean。我通过循环主数据集中的一组指定日期来创建这两个日期框,以基于另一列中的唯一标识符为每个时间步创建df_turbine0和df_turbine1 对于每个时间步,我想计算两个数据帧中WindSp\u mean列之间的皮尔逊相关系数。一些
dtypes:float64(2)
和descripe()
返回非空float64
我将pandas:0.19.0与python2.7一起使用
我有两个数据帧,其中一列为非空浮点数据,称为WindSp\u mean
。我通过循环主数据集中的一组指定日期来创建这两个日期框,以基于另一列中的唯一标识符为每个时间步创建df_turbine0
和df_turbine1
对于每个时间步,我想计算两个数据帧中WindSp\u mean
列之间的皮尔逊相关系数。一些数据帧可能包含NAN,因此我想使用df.corr()
来查找它们的WindSp\u mean
列之间的皮尔逊相关性,而不是np.corrcoef()
通过将第一个df中的WindSp_平均值
与自身进行比较,测试df.corr()
,得出预期答案1
pcorr1=df_turbine0['WindSp_mean'].corr(df_turbine0['WindSp_mean'])
使用两个数据帧的同一列尝试此操作
pcorr2=df_turbine0['WindSp_mean'].corr(df_turbine1['WindSp_mean'])
返回nan,尽管两列中都有144个非空浮点
如果我使用与所用值相同的np.corrcoef()
`
turbine0_windspeed = df_turbine0['WindSp_mean']
turbine1_windspeed = df_turbine1['WindSp_mean']
pcorr1 = np.corrcoef(turbine1_windspeed, turbine0_windspeed)
对于循环中的所有时间步,我都会得到值接近1的结果,直到一些NaN使用ValueError中断代码:除串联轴之外的所有输入数组维度都必须完全匹配
df_涡轮机1、df_涡轮机0的样本数据
datetime WindSp_max WindSp_mean
218705 28/12/2017 18:40 15.4 10.39798
218706 28/12/2017 18:50 14.1 10.49598
218707 28/12/2017 19:00 13.01 9.025653
218708 28/12/2017 19:10 13.68 9.276702
218709 28/12/2017 19:20 14.02 9.125614
218710 28/12/2017 19:30 12.51 8.900918
218711 28/12/2017 19:40 12.76 9.177135
218712 28/12/2017 19:50 12.84 9.082051
218713 28/12/2017 20:00 12.17 8.60314
datetime WindSp_max WindSp_mean
109120 28/12/2017 18:40 13.93 11.08517
109121 28/12/2017 18:50 13.77 10.16184
109122 28/12/2017 19:00 12.93 10.20069
109123 28/12/2017 19:10 14.19 10.64296
109124 28/12/2017 19:20 13.93 10.50484
109125 28/12/2017 19:30 13.77 10.60769
109126 28/12/2017 19:40 14.02 10.81324
109127 28/12/2017 19:50 14.35 10.45523
109128 28/12/2017 20:00 13.68 10.32253
对于此时间步,打印df_turbine0.isnull().sum()
在df_turbine0
或df_turbine1
中均不返回nan值。每个df
包含144个非空值,df_pcorr1
为288行。只要第1列中有一个值,第2列中就有一个nan,反之亦然
我假设由于df_turbine0
和df_turbine1
是同一数据集的子集,因此它们携带了原始df的索引,这可能会导致错误
但是,将索引更改为datetime或将其重置不会对pcorr1()
的计算或索引产生任何影响
df_turbine0.set_index(['datetime'])
df_turbine0.reset_index()
这是一个索引错误。所有较小的df_涡轮机
均来自同一原始数据帧,索引保留。通过使用inplace=True
df\u涡轮机1.重置索引(drop=True,inplace=True)
这是一个索引错误。所有较小的df_涡轮机
均来自同一原始数据帧,索引保留。通过使用inplace=True
df\u涡轮机1.重置索引(drop=True,inplace=True)
我不确定我是否遵守了。您运行df_pcorr1=pd.concat([turbine1_windspeed,turbine0_windspeed],axis=1)
,它连接两个数据帧(或系列),在您的情况下可能都是长度为1的数据帧。为什么要将其与调用np.corrcoff
进行比较?连接数据帧不同于计算相关系数。我错过了什么?很好的观点!你错过了,因为我没有包括所有的代码。现在编辑以包括我正在与之比较的行,np.corrcoff()
,pcorr1=df_pcorr1.corr()
请在文章正文中包括示例数据(而不是as),并确保这样的示例足以满足您在corr
上的NaN问题。您连接的数据帧是什么样子的?e、 例如,df_pcorr1
和朋友?这些应该足够简短,以便在您的问题中完整列出。(旁白:您的代码可能要短得多,因为您基本上已经复制粘贴了相同的代码四次,而不是使用适当的循环。我提到它,因为它还可以让问题更清楚,也就是说,不会被大量重复的代码弄得模糊不清。或者,从示例代码中删除2个涡轮机,这样您的左边就至少有一个好的(没有NAN)和一组不好的连接数据帧。从技术上讲,我们甚至不需要turbine5=turbine_list[5];df_turbine5=df_24hour[df_24hour['StationName'].str.contains(turbine5)]
和朋友,只是df_turbine5
的值,我不确定我是否遵循。您运行df_pcorr1=pd.concat([turbine1\u风速,turbine0\u风速],轴=1)
,连接两个数据帧(或系列),在您的例子中可能是长度1。为什么您要将其与调用np.corrcoff
?连接数据帧不同于计算相关系数。我遗漏了什么?非常好的一点!您遗漏了它,因为我没有包含所有代码。现在编辑以包含我正在与np.corrcoff()进行比较的行
,pcorr1=df_pcorr1.corr()
请在文章正文中包含样本数据(而不是as),并确保这样的样本足以满足你在corr
上的NaN问题。你连接的数据帧看起来像什么?例如,df_pcorr1
和朋友?这些应该足够短,以便在你的问题中完整列出。(旁白:您的代码可能要短得多,因为您基本上已经复制粘贴了相同的代码四次,而不是使用适当的循环。我提到它,因为它还可以让问题更清楚,也就是说,不会被大量重复的代码弄得模糊不清。或者,从示例代码中删除2个涡轮机,这样您的左边就至少有一个好的(没有NAN)和一组不好的连接数据帧。从技术上讲,我们甚至不需要turbine5=turbine_list[5];df_turbine5=df_24hour[df_24hour['StationName'].str.contains(turbine5)]
和朋友,只需要df_turbine5
)