Как я могу распечатать значение на основе условий pandas Dataframe? - PullRequest
0 голосов
/ 09 июля 2020

Я новичок в pandas фреймах данных и python. В настоящее время у меня есть фрейм данных pandas, в котором я хотел бы распечатать значения на основе установленных условий.

Мой df выглядит следующим образом:

ID     Name    Price
1      Apple     1
2      Orange    0.5
3      Pear      0.7

Я хотел бы кодировать это так, что когда я прошу пользователя ввести идентификатор, он вернет цену. Например, если пользователь ввел 2, он должен вернуть 0,5.

inputid = input("Please input ID: ")

Что мне делать дальше, чтобы получить возврат Price из df на основе введенных данных?

Ответы [ 4 ]

1 голос
/ 09 июля 2020

Одно из возможных решений:

  1. Установить ID столбец в df как его индекс:

     df.set_index('ID', inplace=True)
    
  2. Определите следующую функцию:

     def getPrice():
         inputid = input("Please input ID: ")
         try:
             return df.loc[int(inputid), 'Price']
         except:
             return 'No such ID'
    

Затем, когда вы его вызываете, выполнение getPrice():

  • Приглашение на ввод отображается.
  • Пользователь вводит идентификатор.
  • Внутри try block эта функция пытается:
    • преобразовать inputid в int (индекс содержит int значений, но inputid - это строка ), поэтому одной из причин ошибки может быть то, что пользователь просто нажал Введите без ввода какого-либо значения,
    • даже если пользователь ввел число, возможно, что df не содержит такого ID ( вторая причина ошибки).
  • Если до сих пор все в порядке, функция возвращает интересующую цену.
  • Но если возникла какая-либо ошибка, результатом будет ошибка сообщение.
0 голосов
/ 09 июля 2020

Вы можете попробовать:

userin = input("input ID: ")

print("The price for the ID is- ",df[df.ID==float(userin)].Price.values[0])

0 голосов
/ 09 июля 2020

Вот рабочее решение.

df = pd.DataFrame({'ID' : (1, 2,3),
                  'Name':('Apple', 'Orange', 'Pear'),
                  'Price': (1, 0.5, 0.7)})
df
    ID  Name    Price
0   1   Apple   1.0
1   2   Orange  0.5
2   3   Pear    0.7

userin = input("Please input ID: ")
userin
`1`

df.loc[df['ID'] == float(userin)]

    ID  Name    Price
0   1   Apple   1.0

Вам нужно изменить ввод пользователя на float или int для pandas для чтения.

0 голосов
/ 09 июля 2020

Документация Pandas очень хороша и охватывает все, что вам нужно.

https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html

Давайте назовем ваш DataFrame price_df, в зависимости от того, ваш столбец идентификатора установлен как индекс кадра данных или нет.

Если это:

print(price_df.loc[inputid, "Price"])

Если это не так:

print(price_df[price_df["ID"] == inputid]["Price"])

.loc - это основной способ доступа к данным из DataFrame.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...