Мой вопрос очень похож на pandas df.corr () возвращает NaN, несмотря на то, что данные загружаются с заполненными данными , но приведенные в нем решения не работают для меня как мои данные dtypes: float64(2)
и describe()
возвращает non-null float64
.
Я использую pandas: 0,19,0 с python 2,7
У меня есть два кадра данных со столбцом ненулевых данных с плавающей точкой, называемым WindSp_mean
. Я создаю эти два периода времени, просматривая набор указанных дат в основном наборе данных, чтобы создать df_turbine0
и df_turbine1
для каждого временного шага на основе уникального идентификатора в другом столбце.
для каждого временного шага I хотите вычислить коэффициент корреляции Пирсона между столбцом WindSp_mean
в двух информационных кадрах. Некоторые кадры данных могут содержать nans, поэтому я хочу использовать df.corr()
, чтобы найти корреляцию Пирсона между их WindSp_mean
столбцами, а не np.corrcoef()
, проверяя df.corr()
, сравнивая WindSp_mean
в первом df с Сам дает ожидаемый ответ 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 для всех временных шагов в моем l oop, пока некоторые наны не разбивают код с помощью ValueError: all the input array dimensions except for the concatenation axis must match exactly
.
Пример данных для 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()
не возвращает значений nan в df_turbine0
или df_turbine1
. Каждый df
содержит 144 ненулевых значения, а df_pcorr1
составляет 288 строк. Если в столбце 1 есть значение, в столбце 2 указывается значение nan, и наоборот
Я предполагаю, что поскольку df_turbine0
и df_turbine1
являются подмножеством одного и того же набора данных, они содержат индексирование из исходный df, который может вызывать ошибки.
Однако изменение индекса на datetime или сброс его не имеет никакого значения для вычисления pcorr1()
или индекса.
df_turbine0.set_index(['datetime'])
df_turbine0.reset_index()