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