我的问题与pandas df.corr() returns NaN despite data fed having populated data非常相似,但是给出的解决方案对我不起作用,因为我的数据dtypes: float64(2)
和describe()
返回non-null float64
。
我正在使用pandas:python 2.7为0.19.0
我有两个数据帧,其中一列非空浮点数据称为WindSp_mean
。我通过遍历主数据集中的一组指定日期来创建这两个日期框架,以根据另一列中的唯一标识符为每个时间步分别创建一个df_turbine0
和df_turbine1
。
对于每个时间步,我想计算两个数据帧中WindSp_mean
列之间的皮尔逊相关系数。有些数据框可能包含nans,所以我想使用df.corr()
来查找其WindSp_mean
列之间的皮尔逊相关性,而不是np.corrcoef()
通过将第一个df中的df.corr()
与自身进行比较来测试WindSp_mean
,得出的预期答案为1。
pcorr1 = df_turbine0['WindSp_mean'].corr(df_turbine0['WindSp_mean'])
在两个数据框的同一列中尝试使用
pcorr2 = df_turbine0['WindSp_mean'].corr(df_turbine1['WindSp_mean'])
尽管两列中都有144个非null浮点数,但仍返回nan。
如果我使用np.corrcoef()
并使用相同的值。
turbine0_windspeed = df_turbine0['WindSp_mean']
turbine1_windspeed = df_turbine1['WindSp_mean']
pcorr1 = np.corrcoef(turbine1_windspeed, turbine0_windspeed)
直到循环中所有时间步长达到ValueError: all the input array dimensions except for the concatenation axis must match exactly
为止,我在循环中所有时间步的结果都接近于1。
df_turbine1和df_turbine0的样本数据
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
在此时间步长print df_turbine0.isnull().sum()
中,df_turbine0
或df_turbine1
中均不返回任何数值。每个df
包含144个非空值,df_pcorr1
为288行。只要第1列中有一个值,第2列中就有一个nan,反之亦然
我假设因为df_turbine0
和df_turbine1
是同一数据集的子集,所以它们从原始df进行索引,这可能会导致错误。
但是,将索引更改为日期时间或将其重置对pcorr1()
的计算或索引没有任何影响。
df_turbine0.set_index(['datetime'])
df_turbine0.reset_index()
答案 0 :(得分:0)
这是一个索引错误。所有较小的df_turbine
都来自相同的原始Dataframe,并且保留了索引。通过使用inplace =True
df_turbine1.reset_index(drop = True, inplace=True)