Запутанный результат для функции panda qcut

#python #pandas

#python #pandas

Вопрос:

При чтении документации для pd.qcut? я просто не мог понять ее написания, особенно с примерами, один из которых приведен ниже

 >>> pd.qcut(range(5), 4)
... # doctest:  ELLIPSIS
[(-0.001, 1.0], (-0.001, 1.0], (1.0, 2.0], (2.0, 3.0], (3.0, 4.0]]
Categories (4, interval[float64]): [(-0.001, 1.0] < (1.0, 2.0] ...
  

Почему он вернул 5 элементов в списке (хотя в коде указано 4 сегмента), а 2 первых элемента одинаковы (-0.001, 1.0)?
Спасибо.

Ответ №1:

Поскольку 0 находится в (-0.001, 1], то и 1 тоже.

 range(5) # [0, 1, 2, 3, 4, 5]
  

Соответствующая категория [0, 1, 2, 3, 4, 5] является [(-0.001, 1.0], (-0.001, 1.0], (1.0, 2.0], (2.0, 3.0], (3.0, 4.0]].

Комментарии:

1. Спасибо, @quinlong! Я не заметил наполовину открытого диапазона ( ].

Ответ №2:

Посмотрите на range

 list(range(5))
Out[116]: [0, 1, 2, 3, 4]
  

это возвращаемое число 5, когда вы выполняете qcut , 0 , 1 считаются в одном диапазоне


 pd.qcut(range(5), 4)
Out[115]: 
[(-0.001, 1.0], (-0.001, 1.0], (1.0, 2.0], (2.0, 3.0], (3.0, 4.0]]
Categories (4, interval[float64]): [(-0.001, 1.0] < (1.0, 2.0] < (2.0, 3.0] < (3.0, 4.0]]
  

Комментарии:

1. извините, я не вижу ничего более ясного в вашем объяснении. Не должен ли диапазон range(5) быть [(0,1), (1,2), (2,3), (3,4)]? Почему в примере справочной документации было два диапазона (-0.001, 1.0)?

2. @Jason причина в том, что один из диапазонов должен охватывать как 0, так и 1, (0,1) не будет включать 0

3. Ах, я думаю, что теперь я могу следить. Однако, почему он использовал bin (-0.001, 1.0) вместо (0.0, 1.0)?