pandas dataframe - возвращает значение в iloc или возвращает ноль, если оно не существует - PullRequest
0 голосов
/ 23 января 2019

При использовании метода iloc для фрейма данных Pandas я хочу вернуть ноль, если значение не существует: (У меня есть запрос, который всегда будет возвращать либо одну строку, либо пустой фрейм данных. Мне нужно первое левое значение, когда оно существует)

import pandas as pd

mydict = {"col1":[1,2], "price":[1000,2000]}
df = pd.DataFrame(mydict)
query=df[df['price']>3000]

try:
    print(query.iloc[0][0])
except BaseException:
    print(0)

#print result: 0

Есть ли лучший способ или встроенный метод для iloc? Я думаю о чем-то похожем на get метод словарей Python!

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Вы можете быть более питонным, заменяя свой блок try / кроме:

print(0 if len(query)==0 else query.iloc[0][0])

Объяснение: len () применено к пандам. Dataframe возвращает количество строк.

Обновление: как предложено в комментариях, query.empty это более идиоматично и .iat лучше для скалярных поисков, следовательно:

print(0 if query.empty else query.iat[0,0])

0 голосов
/ 23 января 2019

Нет по сути лучшего способа, чем try / except.Обоснованием для iloc является индексирование с помощью integer позиционного местоположения.

Поведение и функциональность соответствуют NumPy np.ndarray, Python list и другим индексируемым объектам.Нет прямого способа индексировать первое значение списка или , возвращать 0, если список пуст.

Немного лучший способ - быть явным и ловить только IndexErrorи используйте iat для доступа к скалярам по целому расположению.Кроме того, вы можете индексировать по строке и столбцу одновременно :

try:
    print(query.iat[0, 0])
except IndexError:
    print(0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...