проблема в записи функции для фильтрации строк данных кадра - PullRequest
0 голосов
/ 19 ноября 2018

Я пишу функцию, которая будет служить фильтром для строк, которые я хотел использовать.Пример фрейма данных выглядит следующим образом:

df = pd.DataFrame()
df ['Xstart'] = [1,2.5,3,4,5]
df ['Xend'] = [6,8,9,10,12]
df ['Ystart'] = [0,1,2,3,4]
df ['Yend'] = [6,8,9,10,12]
df ['GW'] = [1,1,2,3,4]

def filter(data,Game_week):
    pass_data = data [(data['GW'] == Game_week)]

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

df1 = filter(df,1)

Сообщение об ошибке

AttributeError: 'NoneType' object has no attribute 'head'

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

pass_data = df [(df['GW'] == [1])]

Это моя первая проблема.

Моя вторая проблема заключается в том, что я хочу отфильтровать строки с несколькими GW (1, 2,3) и т. Д.

Для этого я могу вручную сделать это следующим образом:

pass_data = df [(df['GW'] == [1])|(df['GW'] == [2])|(df['GW'] == [3])]

, если я хочу использовать при вводе функции в виде списка [1,2,3] какмогу ли я написать это в функции, чтобы я мог ввести диапазон от 1 до 3?

Может кто-нибудь, пожалуйста, посоветуйте?

Спасибо,

Zep

Ответы [ 3 ]

0 голосов
/ 19 ноября 2018

Используйте isin для списка значений вместо скалярного, также filter - существующая функция в python, поэтому лучше изменить имя функции:

def filter_vals(data,Game_week):
    return data[data['GW'].isin(Game_week)]

df1 = filter_vals(df,range(1,4))
0 голосов
/ 19 ноября 2018

Используйте return для возврата данных из функции для первой части.Для второго используйте -

def filter(data,Game_week):
    return data[data['GW'].isin(Game_week)]

Теперь примените функцию filter -

df1 = filter(df,[1,2])
0 голосов
/ 19 ноября 2018

Поскольку в функции нет return, то это будет None, а не требуемый фрейм данных, поэтому сделайте это (обратите внимание, что внутри data[...] также нет необходимости в скобках):

def filter(data,Game_week):
    return data[data['GW'] == Game_week]

Кроме того, isin вполне может быть лучше:

def filter(data,Game_week):
    return data[data['GW'].isin(Game_week)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...