Определите переменную для слайса ":" - PullRequest
2 голосов
/ 17 февраля 2020

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

def mean_loc(df, col_name, idx=None):
    if idx is not None:
        return df.loc[idx, col_name].mean()
    else:
        return df[col_name].mean()

Это работает просто отлично, но мне было интересно, если это возможно, сделать что-то подобное:

def mean_loc_2(df, col_name, idx=None):
    if idx is None:
        idx = :
    return df.loc[idx, col_name].mean()

Это, конечно, не работает, но мне было интересно, если существовал обход? Если я сделаю idx = df.index, оценка df.loc[df.index, col_name] будет намного длиннее, чем df.loc[:, col_name]. Я пытался работать с slice из встроенных функций, выполняя idx = slice(len(df)), но безуспешно (это также дольше и не работает для индексов DateTime).

Кто-нибудь знает, как это сделать? вещь?

1 Ответ

2 голосов
/ 17 февраля 2020

: не является значением; это часть синтаксиса Python. Вам нужен объект slice, который представляет синтаксис :.

if idx is None:
    idx = slice(None)  # sadly, slice() does not work

Поскольку объект slice является неизменным, его можно использовать в качестве значения параметра по умолчанию.

def mean_loc_2(df, col_name, idx=slice(None)):
    return df.loc[idx, col_name].mean()
...