Ошибка значения: значение истинности ряда неоднозначно. Используйте.empty, a.bool(), a.item(), a.any() или a.all(). pandas

#python #pandas #dataframe #numpy

#python #панды #фрейм данных #numpy

Вопрос:

Я пытаюсь найти минимальное значение данных столбца без использования встроенной функции.

Может кто-нибудь, пожалуйста, помочь мне в этом вопросе ниже.

 import pandas as pd
file_loc= 'filepath'
data= pd.read_csv(file_loc)
cpiData= data['cpi'].unique()
minValue =data['cpi'].head(0)
print("type of min ", type(minValue))
min=100
for i in cpiData:
    print(type(i),"min", minValue.astype(float))
    **if minValue.astype(float) > float(i): # getting the error while comparing both the values.**
        minValue=i

print(min,"Minimum value ")
 

введите описание изображения здесь

Ответ №1:

Первое исправление относится к способу выбора начального значения MinValue . Обратите внимание, что ваша формула ( data['cpi'].head(0) ) на самом деле означает:

  • data['cpi'] — возьмите столбец cpi,
  • head(0) — получить 0 начальных элементов,

таким образом, результатом является пустой ряд.

Правильная формула: minValue = data.iloc[0].cpi , т.е.:

  • data.iloc[0] — возьмите начальную строку из данных (это серия),
  • cpi — считайте cpi из него.

Остальная часть вашей программы (цикл с диагностическими распечатками) может быть изменена на:

 for i in cpiData:
    print(i)
    if minValue > i:
        minValue = i
        print('New min')
 

Обратите внимание, что ваш столбец уже имеет тип float , поэтому вам не
нужно преобразовывать его в float .

И чтобы распечатать результат после цикла, выведите MinValue , а не min (min — встроенная функция):

 print('Minimum value:', minValue)
 

На самом деле, ваша инструкция min=100 перезаписывает встроенную функцию min
с целочисленным значением. Не делайте таких вещей, так как это разрушает вашу рабочую
среду.

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

1. Конечно, я не буду использовать какие-либо встроенные имена функций для переменных. Спасибо.

Ответ №2:

Pandas head() возвращает первые n строк вашего столбца data['cpi'] . Тип возвращаемого значения pandas.core.series.Series .

Прежде всего, у вас может быть ошибка при возврате head(0) . Он просто возвращает пустой ряд.

astype() Функция изменяет тип всех элементов в данном объекте на заданный dtype . Здесь входным объектом является a Series (результат вашего вызова head(0) ), поэтому выходным объектом также будет a Series , который будет содержать float значения.

Теперь вы сравниваете a Series (the minValue.astype(float) ) с a float (the float(i) ), и ошибка гласит: «Я не знаю, как сравнить этот Series объект с a float «, что имеет смысл.

Вы можете сделать:

 minValue[0].astype(float) > float(i)
 

чтобы сравнить первый элемент ряда с i . Однако будьте осторожны с вышеупомянутой потенциальной ошибкой: ваша серия на самом деле ничего не содержит, потому что вы вызываете head(0) вместо head(1) .