Как выбрать уникальные значения из столбца с помощью np.unique в python

#python #arrays #pandas #unique

Вопрос:

У меня есть следующий фрейм данных, называемый Деревьями.

 FieldSP Common_name     FIA_code   DBH          Height     Year
BP      Bishop Pine     120        11.3435      45.76023   2014
BP      Bishop Pine     120        21.17852     126.86418  2014
CB      CA Bay/Laurel   981        21.19289     114.02973  2011
CB      CA Bay/Laurel   981        24.73787     138.85386  2011

 

Следующие строки кода-это мои попытки получить уникальное значение для столбца «Год». В этом столбце есть только одно значение, одинаковое для всех строк в фрейме данных.

 Year = np.unique(Trees['Year'])

Year = Trees['Year'].iloc[0]

Year = np.unique(Trees[Trees.Year])

if Year == 2014:
    Trees.loc[(Trees['FieldSP'] == 'RW') amp; (Trees['DBH'] <= 39.37), 'FieldSP'] = 'Rwa'
    Trees.loc[(Trees['FieldSP'] == 'RW') amp; (Trees['DBH'] <= 39.37), 'FIA_code'] = '211a'
    Trees.loc[(Trees['FieldSP'] == 'RW') amp; (Trees['DBH'] > 39.37), 'FieldSP'] = 'Rwb'
    Trees.loc[(Trees['FieldSP'] == 'RW') amp; (Trees['DBH'] > 39.37), 'FIA_code'] = '211b'
elif Year == 2011:
    print('COP 2011 has not been added yet!')
    quit()
else:
    print('the COP year in the treelist is not one we know about. fix it')
quit()
 

Эта строка выполняется для нескольких кадров данных, все с разными годами (но год постоянен для каждого кадра данных). Поэтому я не хочу, чтобы мне приходилось жестко указывать значение за год.

Я продолжаю получать следующее сообщение об ошибке при запуске моего сценария. Таким образом, кажется, что np.unique создает пустой массив. И я не знаю, как это исправить. Есть ли способ выбрать уникальное значение из столбца «Год»?

 postfse.py:184: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.
  if Year == 2014:
postfse.py:189: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.
  elif Year == 2011:
the year in the treelist is not one we know about. fix it
 

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

1. Строки, которые показывает ваше сообщение об ошибке, отличаются от кода, который вы показали. Пожалуйста, укажите раздел кода, который вызывает ошибку.

2. И какой же цели вы пытаетесь достичь? У вас уже есть год колонки. Какой смысл в том, чтобы снова получить этот год?

3. Спасибо Генри за то, что указал на это. Я добавил ту часть кода, которая вызывает ошибку. Хотя я думаю, что это связано с тем, как создается Год.

4. Надеюсь, это также поможет ответить на вопрос, почему я пытаюсь получить значение года. Для только что добавленного оператора if.

5. Попробуй: Year = Trees['Year'].unique()[0]

Ответ №1:

Заменить Year = np.unique(Trees[Trees.Year]) на Year = np.unique(Trees['Year'])

Это если вам нужно использовать numpy. Вместо этого я бы просто удалил строку кода, учитывая, что у меня уже есть Год.

Ваш вопрос, возможно, не дает полной картины проблемы. Вы попадаете в ситуацию, когда в кадре данных нет строк?

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

1. Итак, вы предлагаете сделать что-то вроде следующего: если деревья[‘Год’].уникальный()[0] == 2014: XYZ… Деревья элиф[‘Год’].уникальный()[0] == 2011: ABC… бросить курить()

2. По сути, я хочу запустить этот оператор if для нескольких кадров данных. Если значение года равно 2014, то запустите эту часть инструкции, если значение года равно 2011, то запустите инструкцию elif. Но когда я пытаюсь запустить строку выше Year = np.unique(Деревья[‘Год’]), Год-это пустой массив.