我正在尝试在我的数据透视表生成器上实现一个过滤器,生成一个表: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来自哪个想法?
修改
以下是我一直在测试此数据的示例(包含字符串和整数的列):
答案 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`)