何时在 pandas 数据框中使用 .query() 而不是 .loc?

The*_*ome 5 python dataframe pandas

问题

\n

查询 a 的正确或最佳方法是什么pandas DataFrame

\n

这取决于用例,还是你可以说“总是使用 .query()”或“从不使用 .query()”?

\n

我主要关心的是代码的稳健性或防错性,但性能当然也很重要。

\n

这篇文章中,查询方法被认为是稳健的并且比其他方法更受青睐,您同意吗?我应该始终使用 .query() 吗?

\n
\n

pandas 中的 DataFrame.query() 函数是过滤 pandas DataFrame 对象行的强大方法之一。

\n

最好使用 DataFrame.query() 函数来选择或过滤 pandas DataFrame 对象的行,而不是传统和常用的索引方法。

\n
\n

背景

\n

我最近遇到了 .query() 方法,并开始经常使用它,以方便起见,因为我认为这是正确执行此操作的方法。

\n

然后我读了这两篇文章(内容对于这个问题来说不是必需的,我只是想展示是什么让我思考这个问题):

\n

apply,您从未需要的便捷功能

\n

\n

如何处理Pandas中的SettingWithCopyWarning?

\n

在帖子中SettingWithCopyWarning提到了 .loc 和 .at 等不同方法,但没有提到 .query()。这让我想知道 .query() 是否真的被使用了。(我想我开始一个新问题而不是在评论中发布这个问题)。它可能也与那个特定问题无关,但它仍然让我想知道。

\n

关于“apply - 便利函数...”的帖子让我想知道 .query() 是否也是您永远不需要的便利函数。

\n

文档提到了以下用例:

\n
\n

query() 用例

\n

query() 的一个用例是当您拥有 DataFrame 对象的集合,且这些对象的列名称(或索引级别/名称)的子集位于 common 中时。您可以将相同的查询传递给两个框架,而无需\n指定您\xe2\x80\x99有兴趣查询哪个框架

\n
\n

编辑:修复了问题的链接.apply()

\n

小智 3

我认为这个问题没有一个很难回答的问题。要回答您是否应该始终使用查询的问题,简单的答案是否定的。

查询方法eval在幕后使用,这使得它的性能较差。那么什么时候应该使用查询呢?如果您尝试过滤的条件非常具体并且涉及多个列,则应该使用查询。虽然最熊猫式的过滤方式是使用loc,但有时 loc 后的链接会失控。

决定使用查询方法应该基于可读性和性能。如果您一遍又一遍地使用 loc,您可能希望使用简单的查询字符串来修改它。但是,如果切换使您的代码性能降低,并且您正在处理关键任务数据,则您应该牺牲一点可读性而不是性能。