python — возвращает результаты на основе максимальных и минимальных входных данных от пользователей

#python #python-3.x #dataframe

#python #python-3.x #фрейм данных

Вопрос:

Отредактировано — с использованием Pandas 🙂

Я пытаюсь извлечь доступные типы flat_types (например. один bedder, два bedder) на основе ввода пользователем минимальной и максимальной суммы, которую они готовы потратить. Кажется, я не могу получить никаких результатов — я делаю это неправильно? Спасибо!

 # By Flat Price
min_flat_price = input ("Enter a minimum flat price: ")
max_flat_price = input ("Enter a maximum flat price: ")

def flat_price():
    dummy_df = df[[df['resale_price']>= min_flat_price] amp; df[['resale_price']>= max_flat_price]]
    return (dummy_df['flat_type'.values])
    #results_df = df.loc[df['resale_price'].isin([min_flat_price, max_flat_price])]
 

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

1. пожалуйста, отредактируйте, чтобы указать, какой фрейм данных вы используете (я полагаю, pandas, но я могу ошибаться) и структуру базы данных (только ту часть, которая необходима для понимания того, что вы пытаетесь сделать)

2. Да, с использованием pandas! 🙂

3. мое первое предположение было бы .values в инструкции return, должно быть вне квадратных скобок

4. opps вы правы насчет квадратных скобок, но он по-прежнему не выдает результаты: (

5. смотрите Ответ ниже, у вас есть > вместо < с максимальным

Ответ №1:

Я не могу запустить ваш код для тестирования, но я вижу, что в вашем условном:

 df['resale_price']>= min_flat_price] amp; df[['resale_price']>= max_flat_price
 

должно быть:

 df['resale_price'] >= min_flat_price] amp; df[['resale_price'] <= max_flat_price
 

Также вы должны заключить это условие в круглые скобки вместо скобок. Обновленный код должен быть таким:

 def flat_price():
    dummy_df = df[(df['resale_price'] >= min_flat_price] amp; df[['resale_price'] <= max_flat_price)]
    return dummy_df['flat_type']
 

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

1. Спасибо, что заметили логическую ошибку 🙂 Однако я все еще не могу вернуть результаты. Это потому, что я не печатаю его?

2. Если вы ожидаете, что данные будут выводиться на экран, тогда да, вы должны распечатать результат вызова функции.

Ответ №2:

Если я правильно понял ваш вопрос…

 >>> from collections import namedtuple
>>> flat = namedtuple("flat", ["title", "price"])
>>> flats = [
   flat(title="flat 1", price=200),
   flat(title="flat 2", price=20),
   flat(title="flat 3", price=2000000)
]
>>> # you have to adjust the code according to how your data is structured.
>>> minprice = 120
>>> maxprice = 1000
>>> #you can then use the filter function like so
>>> #python supports chained conditional operators     /            /
>>> affordableflats = list(filter(lambda flat: minprice < flat.price < maxprice, flats))
>>> affordableflats
[flat(title='flat 1', price=200)]
 

Было бы неплохо, если бы вы указали, как настроена ваша конкретная структура данных. Глядя на ваш код, похоже, что ваши цены указаны в строковом формате, поскольку вы не преобразуете входные данные в число.

Ответ №3:

Спасибо всем! Мне удалось отсортировать это

 min_flat_price = float(input ("Enter a minimum flat price: "))
max_flat_price = float(input ("Enter a maximum flat price: "))

df['resale_price'] = df['resale_price'].astype(float) ## this is comparing the price against the input and ensuring that the type is correct. 

dummy_df = dummy_df[(dummy_df['resale_price'] >= min_flat_price) amp; (dummy_df['resale_price'] <= max_flat_price)]
dummy_df = dummy_df['flat_type'] #pulls out the flat_type in CSV file 
dummy_df = dummy_df.drop_duplicates() #drops duplicates 
print(dummy_df)