写入功能以过滤行数据框时出现问题

时间:2018-11-19 06:20:57

标签: python pandas function

我正在编写一个函数,该函数将用作我要使用的行的过滤器。 示例数据帧如下:

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 :(得分:1)

因为您没有在函数中使用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)]

答案 1 :(得分:1)

使用isin来传递值列表而不是标量,filter也是python中的现有函数,因此更改函数名称更好:

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

df1 = filter_vals(df,range(1,4))

答案 2 :(得分:1)

使用return从函数的第一部分返回数据。对于第二个,使用-

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

现在应用filter函数-

df1 = filter(df,[1,2])