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