当np.corrcoef()返回值时,熊猫df.corr()返回nan,除非数据集中的NaN

时间:2020-02-20 14:21:14

标签: python python-2.7 numpy dataframe correlation

我的问题与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_turbine0df_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。

enter image description here

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_turbine0df_turbine1中均不返回任何数值。每个df包含144个非空值,df_pcorr1为288行。只要第1列中有一个值,第2列中就有一个nan,反之亦然

我假设因为df_turbine0df_turbine1是同一数据集的子集,所以它们从原始df进行索引,这可能会导致错误。

但是,将索引更改为日期时间或将其重置对pcorr1()的计算或索引没有任何影响。

df_turbine0.set_index(['datetime'])

df_turbine0.reset_index()

1 个答案:

答案 0 :(得分:0)

这是一个索引错误。所有较小的df_turbine都来自相同的原始Dataframe,并且保留了索引。通过使用inplace =True

重置索引可以解决此问题

df_turbine1.reset_index(drop = True, inplace=True)