FutureWarning: .loc или [] с отсутствующей меткой, предлагает использовать .reindex () [duplicate]

1

Мой вход dataframe имеет Date в формате четверти и Rate. В Date отсутствует квартал. Теперь я пытаюсь вычислить Update основанное на логике, что, если доступна 3-я четверть четверть, выберите эту скорость, иначе выберите последнюю скорость. Мой текущий код выглядит следующим образом:

# Create dataframe
df1 = pd.DataFrame([[1, '2015Q3'], [2, '2015Q4'], 
                    [6, '2017Q1'], [7, '2017Q4'], 
                    [9, '2018Q1'], [3, '2018Q2'],
                    [5, '2018Q3'], [4, '2018Q4']],
                  columns=['Rate', 'Date'])
df1.index = pd.PeriodIndex(df1.Date, freq='Q')
df1.drop(columns='Date', inplace=True)

# This Code produces 'FutureWarning' message
df1['Update'] = np.where(np.in1d(df1.index - 3, df1.index.values),
                         df1.loc[df1.index - 3].Rate, df1.Rate.shift(1))

Полное предупреждающее сообщение:

FutureWarning: 
Passing list-likes to .loc or [] with any missing label will raise
KeyError in the future, you can use .reindex() as an alternative.

See the documentation here:
https://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike

Ссылка в предупреждении: deprecate-loc-reindex-listlike

Я понимаю, что, поскольку на моем index есть арифметический расчет, а часть значения index при расчете отсутствует, что вызывает это предупреждающее сообщение и предлагает использовать pandas.DataFrame.reindex. Хотя мое намерение заключается в доступе к Rate только если index доступен на основе значения True или False из условия в np.where но я предполагаю, что numpy вычисляет для всех и, следовательно, отсутствующий index.

Я попытался расширить диапазон Date, но у него будет такая же проблема вблизи границы. Итак, теперь мой вопрос заключается в том, как разрешить это предупреждение. Любые идеи/мысли/информация/ссылки были бы полезными.

Теги:
pandas

1 ответ

0
Лучший ответ

Проблема в том, что при подготовке к тому, что np.where может или не понадобится, df.loc[df.index - 3] оценивается для всех значений df.index - 3. Предупреждающее сообщение является хорошим и предполагает, что вместо этого вы должны использовать df.reindex(df.index - 3).

df1['Update'] = np.where(np.in1d(df1.index - 3, df1.index.values),
                         df1.reindex(df1.index - 3).Rate, df1.Rate.shift(1))
  • 0
    Большое спасибо @piRSquared, предупреждение удалено. Из примеров, приведенных в ссылке, было неясно, что нужно использовать таким образом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню