#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)
.