Как заменить значения в соответствии с непоследовательным списком индексов в кадре данных панд? - PullRequest
0 голосов
/ 05 июля 2018

Я искал быстрый и эффективный способ заменить значения в данном столбце кадра данных pandas, только если соответствующие индексы принадлежат списку непоследовательных чисел. Скажите non_consecutive_indices_list = [1400, 6571, 14526, 68420, ...] с ок. 30k различных значений.

  1. Я пытался использовать .iloc, но получаю сообщение об ошибке:

    df.iloc[non_consecutive_indices_list, 'column'] = New_Value
    

ValueError: Может индексировать только по местоположению с [целочисленным, целочисленным срезом (точка START включена, точка END исключена), списком целых чисел, логическим массивом].

  1. В качестве альтернативы я пробовал следующее:

    df.iloc[non_consecutive_indices_list].column = New_Value
    

Но это возвращает копию исходного кадра данных, поэтому я не могу заменить исходные значения.

  1. Наконец, я попытался использовать цикл for, который работает, но это очень неэффективно и требует замены около 30 тыс. Значений:

    for i in non_consecutive_indices_list:
        df.loc[i, 'column'] = New_Value
    

Есть идеи, как это сделать быстрее всего?

1 Ответ

0 голосов
/ 05 июля 2018

Изменить iloc на DataFrame.loc Функция:

df = pd.DataFrame({'column':list('abcdefghij')})

non_consecutive_indices_list = [2,4,1,6]
df.loc[non_consecutive_indices_list, 'column'] = 'New_Value'
print (df)
      column
0          a
1  New_Value
2  New_Value
3          d
4  New_Value
5          f
6  New_Value
7          h
8          i
9          j
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...