Я получаю это ValueError: array must not contain infs or NaNs
даже после того, как я использовал np.nan_to_num()
.
Как вы можете видеть в блоке кода ниже, я написал функцию, которая выставляет оценки настроения через функцию logit
в получить нормальное распределение. Сначала я получил ValueError
выше, поэтому я решил попробовать использовать np.nan_to_num()
для оценки настроений, а затем ввести их в функцию pearsonr
. Однако даже после этого это все еще создает ошибку. Когда я использую logit
и np.nam_to_num()
в отдельном модульном тесте и печатаю вывод, значения inf или nan отсутствуют (хотя: до использования np.nam_to_num()
были некоторые инфы, вызванные функцией logit
, но все они были успешно заменены в отдельном модульном тесте, который был напечатан). Я не уверен, что происходит в 1 oop ниже, хотя. Для справки, new_all_data
- это просто pandas фрейм данных, который я использовал для хранения всех различных частей информации. Любая помощь приветствуется!
from scipy import special, stats
import numpy as np
def logit_correlate(sentiments, percent_changes):
normalised_sentiments = special.logit(sentiments)
normalised_sentiments_fixed = np.nan_to_num(normalised_sentiments)
r, p_value = stats.pearsonr(normalised_sentiments_fixed, percent_changes)
return r, p_value
for sentiment in ['weighted_sentiments', 'unweighted_sentiments', 'weighted_sentiments_DBSCAN', 'full_mean', 'full_mean_unrounded', 'full_mode']:
r_1yr, p_value_1yr = logit_correlate(new_all_data[sentiment], new_all_data['% change 1 year'])
print(f'{sentiment:10} 1 year r={r_1yr:10} p={p_value_1yr:10}')
Редактировать: Я провел еще один тест, чтобы убедиться, что я не схожу с ума. Вот модифицированная функция logit_correlate
:
def logit_correlate(sentiments, percent_changes):
normalised_sentiments = special.logit(sentiments)
normalised_sentiments_fixed = np.nan_to_num(normalised_sentiments)
print(np.isnan(normalised_sentiments_fixed).any())
print(np.isinf(normalised_sentiments_fixed).any())
print(np.isnan(percent_changes.values).any())
print(np.isinf(percent_changes.values).any())
r, p_value = stats.pearsonr(normalised_sentiments_fixed, percent_changes)
return r, p_value
Как вы можете видеть, я проверил, чтобы убедиться, что ни в одном из входных массивов для корреляции Пирсона нет значений nan или inf (pearsonr
) , Все вернулось ложным. Функция прерывается, когда вызывается функция pearsonr
, запускаются функции logit
и np.nan_to_num()
(я также напечатал их вывод, чтобы убедиться). И все же это все еще поднимает ValueError
.