Фильтрация фрейма данных Pandas на основе нескольких значений пользовательского ввода

#python #python-3.x #pandas

Вопрос:

У меня есть следующий код для выбора одной строки во фрейме данных:

 products_df1_final = (products_df1.loc[products_df1['uuid'] == "790a06bf-91a5- 
487e-988e-2c8294bd4355"])
products_df1_final
 

Однако я, похоже, не могу заставить это работать, когда пользователь вводит более одного значения поля «uuid» для фильтрации. Я хотел бы создать небольшой код, чтобы попросить пользователя ввести различные значения полей «uuid», чтобы создать фрейм данных только с выбранными пользователем строками «uuid».

Следующий код не работает:

 n = str(input('Enter product numbers:')) products_df1_final =
(products_df1.loc[products_df1['uuid'] == 'n'])
display(products_df1_final[['title','uuid','ingestiondate','size']])
 

Фрейм данных

Ответ №1:

Одна из проблем заключается в том, как вы использовали свою входную переменную n . Если вы процитируете его, как вы это сделали, он будет рассматриваться как строка "n" вместо имени переменной.

Другой способ-это то, как выглядит ввод. Если это строка, она не будет работать. Вы должны использовать список. Примером может быть:

 n = str(input('Enter product number:')) 
m = str(input('Enter another product number:')) 
products_df1_final = (products_df1.loc[products_df1['uuid'] == [n, m]])
 

Или, чтобы расширить его до реальной переменной списка product_names :

 product_names = []
pname = None
while pname != '':
    pname = str(input('Enter product number:'))
    if pname != '':
         product_names.append(pname)   

products_df1_final = (products_df1.loc[products_df1['uuid'] == product_names])
 

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

1. Мне нравится первый, потому что он прост, и я не могу загружать больше 2 за раз. Ошибка значения: (‘Длины должны совпадать для сравнения’, (9,), (2,)) для обоих. —> 224 «Длины должны совпадать для сравнения», значения.форма, значения.форма 225 ) 226

2. Каковы ваши точные данные? Пожалуйста, добавьте несколько строк в свой фрейм данных.

3. Я только что добавил скриншот, на который вы можете посмотреть.

Ответ №2:

Использовал подход к пониманию списка.

 # Directory to place files
download_directory = (r"C:UsersMatthewOneDriveLand Suitability ModelLayersSentinelSentinel RSTDownloads")

print("Enter Two UUID tiles for download:")

n = input('Enter product number:')
m = input('Enter another product number:')
#products_df1_final = products_df1[[x == ["n", "m"]] for x in products_df1.uuid
products_df1_final = products_df1[products_df1.uuid.isin([n, m])]
products_df1_final

# Sentinel Products to download 
api.download_all(products_df1_final.index, checksum=True)