Давайте начнем с базовых c определений.
Уникальный индекс
A уникальный индекс - это индекс, который содержит не повторяющиеся метки. В таком индексе не может быть двух или более идентичных меток.
Чтобы проверить, является ли данный индекс уникальным, можно использовать атрибут pd.Index.is_unique
, например:
>>> pd.Index(['s', 'a', 'm']).is_unique
True
>>> pd.Index(['s', 'a', 'm', 'a']).is_unique
False
В качестве документации Как уже упоминалось, примером такого индекса может быть pd.Index(list('abc'))
, содержащий три уникальные метки a
, b
и c
, который также является монотонным c. уникальным немонотонным c индексом может быть, например, pd.Index(list('acb'))
, который нарушает прямой ордер при обратном движении от c
до b
.
Monotoni c Индекс
Монотонность - это математическое свойство, которое указывает, что данная функция поддерживает неубывающий или неубывающий порядок во всей своей области. В pandas, monotoni c index - это индекс, который следует за этим свойством.
Аналогично уникальности, вы можете проверить монотонность индекса с атрибутом, pd.Index.is_monotonic
или его производные, т.е. pd.Index.is_monotonic_increasing
и pd.Index.is_monotonic_decreasing
.
. В этом случае в документации представлен другой пример: pd.Index(list('abbc'))
, который является неуникальным монотонным c индексом с дублирующейся меткой b
. Также упоминается неуникальный немонотонный индекс c, pd.Index(list('abcb'))
. Дублированная метка снова b
, в то время как ордер нарушен на c -> b
, что противоречит ранее установленному ордеру a -> b -> c
.
pd.Index.get_lo c
Этот pandas метод индекса использует предопределенные концепции для определения его возвращаемого значения. Его ожидаемое поведение определяется следующим образом. Если индекс уникален, то он должен возвращать значение индекса int
. Если он не уникален, метод учитывает монотонность индекса. Если он окажется монотонным, он возвращает slice
. В противном случае он возвращает маску.
Ваш индекс выборки, idx
уникален (и монотонен, хотя и не имеет значения), поэтому вы ожидаете, что get_loc
должен вернуть int
. Однако это гарантируется только для точных совпадений с метками. Это не верно для частичных совпадений, таких как те, которые вы используете. Я оставляю вас с выводом, который показывает разницу в использовании:
>>> idx.get_loc('2019-12-24')
slice(0, 1, None)
>>> idx.get_loc('2019-12-24 12:04:54')
0