Есть ли в пандах фильтр «Идентичность» - PullRequest
0 голосов
/ 12 октября 2018

У меня есть функция, которая принимает некоторые сложные параметры и, как ожидается, вернет фильтр, который будет использоваться на фрейме данных pandas.

filters = build_filters(df, ...)
filtered_df = df[filters]

Например, если фрейм данных имеет серии Gender и Age, build_filters может вернуть (df.Gender == 'M') & (df.Age == 100)

Если, однако, build_filters определяет, что не должно быть применено никаких фильтров, есть ли что-то, что я могу вернуть (например, «фильтр идентификации»), который будетрезультат df не фильтруется?

Я пробовал очевидные вещи, такие как None, True, и даже генератор, который возвращает True для каждого вызова next()

Самое близкое, что я пришел, это

operator.ne(df.ix[:,0], nan)

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

1 Ответ

0 голосов
/ 12 октября 2018

Вы можете вернуть slice(None).Вот тривиальная демонстрация:

df = pd.DataFrame([[1, 2, 3]])

df2 = df[slice(None)]  # equivalent to df2 = df[:]
df2[0] = -1

assert df.equals(df2)

В качестве альтернативы используйте pd.DataFrame.pipe и верните df, если не требуется применять фильтры:

def apply_filters(df):
    # some logic
    if not filter_flag:
        return df
    else:
        # mask = ....
        return df[mask]

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