У меня проблема с функцией qcut в python. Моими верхними и нижними границами являются -Inf и Inf, но когда я применяю qcut с этими границами, Python возвращает эту ошибку «не может преобразовать бесконечность с плавающей запятой в целое число».
Мои друзья сказали мне, что я должен изменить Inf на 1e100 (очень большое число представляет ), чтобы qcut мог использовать. Однако возникает другая ошибка: «IndexError: только целые числа, срезы (:
), многоточие (...
), numpy.newaxis (None
) и целые или логические массивы являются допустимыми индексами»
Пример:
a1 = [-Inf, 26.6, 36.2, 38.7, 42.1, 47.2, 117.7]
a2 = [-1e100, 26.6, 36.2, 38.7, 42.1, 47.2, 117.7]
cut_range = [-Inf, 27.0, 33.0, 40.0, Inf] #For a1
cut_range = [-1e+100, 27.0, 33.0, 40.0, 1e+100] #For a2
b = pd.qcut(a, cut_range, duplicates = 'drop')
Я хочу иметь окончательный результат следующим образом:
b = ['[-Inf,27]','(33,40]','(33,40],'(40, Inf]','(40, Inf]','(40, Inf]']
or with 1e100:
b = ['[-1e100,27]','(33,40]','(33,40],'(40, 1e100]','(40, 1e100]','(40, 1e100]']
И кто-нибудь мог бы помочь мне объяснить, как Inf работает в Python и в R. Они оба Infinite, но почему они ведут себя так по-разному.
В R я попробовал функцию с Inf, и она сработала:
as.character(cut(a1,cut_range, include.lowest = TRUE))
qcut
для квантили. Если у вас уже есть точки разреза, вам, вероятно, понадобитсяpd.cut
- person piRSquared   schedule 29.05.2019