Pandas Pivot表:字符串和整数过滤器

时间:2017-05-25 16:23:02

标签: python pandas filter pivot-table

我正在尝试在我的数据透视表生成器上实现一个过滤器,生成一个表:table,可以过滤掉整数(<,< =,>,> =,=和!= )和字符串值(!=,=)根据用户规范:

attribute = raw_input('Attribute to filter: ')
conditional = raw_input('Conditional to filter by: ')
limit = raw_input('Value to filter by: ')

如果我选择的属性由整数组成,则通过执行以下操作,过滤器有效(如果不需要过滤器,则"All Values"是建议的输入):

if attribute != "sAtt1" and attribute != "sAtt2" and attribute != "sAtt3":
    limit = int(limit)

if conditional != "All Values" or conditional != "all values":
    if conditional == "!=":
        table = table[table[attribute] != limit]
    elif conditional == "=":
        table = table[table[attribute] = limit]

等等剩余的条件。

attribute由字符串组成时,这不起作用。

sAtt1,sAtt2和sAtt3是由字符串组成的属性(我希望保持不变)但是当使用(例如)sAtt1时会发生以下错误:

KeyError: "sAtt1"

这让我感到困惑,因为包含错误的属性没有返回此错误 - KeyError来自哪个想法?

修改

以下是我一直在测试此数据的示例(包含字符串和整数的列):

https://www.dropbox.com/s/gyvho9cmxqx4nta/Football.csv?dl=0

1 个答案:

答案 0 :(得分:2)

选项1
我构建了一个操作地图

op_map = {
    '<': pd.Series.lt,
    '<=': pd.Series.le,
    '>': pd.Series.gt,
    '>=': pd.Series.ge,
    '==': pd.Series.eq,
    '!=': pd.Series.ne
}

然后你可以像这样使用它:

op_map[conditional](table[attribute], limit)

选项2
您还可以构建一个query字符串。但是你无法使用=

table.query('@attribute @conditional @limit`)