Подтвердить что ты не робот

Return default, если pandas местоположение dataframe.loc не существует

Мне часто приходится проверять, существует ли столбец или строка в кадре данных, прежде чем пытаться ссылаться на него. Например, я добавляю много кода, например:

if 'mycol' in df.columns and 'myindex' in df.index: x = df.loc[myindex, mycol]
else: x = mydefault

Есть ли способ сделать это более красиво? Например, на произвольном объекте я могу сделать x = getattr(anobject, 'id', default) - есть ли что-то похожее на это в pandas? Действительно, любой способ добиться того, что я делаю более изящно?

4b9b3361

Ответ 1

Существует метод Series:

Итак, вы можете сделать:

df.mycol.get(myIndex, NaN)

Пример:

In [117]:

df = pd.DataFrame({'mycol':arange(5), 'dummy':arange(5)})
df
Out[117]:
   dummy  mycol
0      0      0
1      1      1
2      2      2
3      3      3
4      4      4

[5 rows x 2 columns]
In [118]:

print(df.mycol.get(2, NaN))
print(df.mycol.get(5, NaN))
2
nan

Ответ 2

У Python есть такой менталитет, чтобы просить прощения вместо разрешения. Вы найдете много постов по этому вопросу, первым, на который я наткнулся прямо сейчас, был этот.

В Python перехват исключений - относительно недорогая операция, и поэтому вам рекомендуется ее использовать. Это называется подходом EAFP.

То есть в вашем примере это, вероятно,

try:
    x = df.loc['myindex', 'mycol']
except KeyError:
    x = mydefault

Я не могу запустить Pandas прямо сейчас, поэтому я не уверен, что это на самом деле IndexError, но я верю в это.