例如,为了一个例子,我有几个列编码不同类型的速率("annual rate"
,"1/2 annual rate"
,等等)。我想在我的dataframe上使用query
来查找这些速率中任何一个都高于1
的条目。在
首先,我找到要在查询中使用的列:
cols = [x for ix, x in enumerate(df.columns) if 'rate' in x]
其中,cols
包含:
^{pr2}$
然后我想做些类似的事情:
df.query('any of my cols > 1')
如何格式化query
?在
Tags:
像这样的东西应该能起作用
不过,我不知道如何处理列名中的空格,所以您可能需要重命名它们。在
query
执行Python表达式的完整解析(有一些限制,例如,不能使用lambda
表达式或三元if
/else
表达式)。这意味着您在查询字符串中引用的任何列都必须是有效的Python标识符(“变量名”的更正式的单词)。检查这一点的一种方法是使用隐藏在tokenize
模块中的Name
模式:现在,由于列名中有空格,每个用空格分隔的单词都将被计算为单独的标识符,因此您将得到类似于
^{pr2}$这是无效的Python语法。尝试在Python解释器中输入
annual rate
,您将得到一个SyntaxError
异常。在回家消息:将列重命名为有效的变量名。除非列遵循某种结构,否则您将无法以编程方式(至少,很容易)执行此操作。在你的情况下,你可以
然后,您可以像@acushner的示例那样格式化查询字符串
注意:您实际上不需要来使用
query
这里:正如@Jeff在评论中指出的那样,您可以引用非标识符列名,尽管方式很笨拙:
如果你想拯救小猫的生命,我不建议你写这样的代码。在
相关问题 更多 >
编程相关推荐