#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(Деревья[‘Год’]), Год-это пустой массив.