Python递归错误:简单操作崩溃Pandas.eval()

2024-10-02 10:22:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚读过书,兴奋得流口水,因为我的Pandas相关需求。根据这本书:

The DataFrame.eval() method allows much more succinct evaluation of expressions with the columns:

result3 = df.eval('(A + B) / (C - 1)') 
np.allclose(result1, result3)

True

以我为例:

我的数据框包含大约42000条记录和28列。其中两个是Date和{},它们是字符串。在

我的目标是:将两列合并为一列。这段代码我可以很容易地做到:df_exade_light["Date"]+df_exade_light["Heure"],在它上面应用一个%timeit返回

6.07 ms ± 219 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

但是由于某些原因,df.eval('Date + Heure')返回一个:

RecursionError: maximum recursion depth exceeded

此外,我应用了this thread中的解决方案来提高允许的堆栈深度,但是内核只是崩溃了。在

这是什么原因?我做错什么了吗?在


问题可以用以下代码重现:

^{pr2}$

Tags: ofthe代码dataframepandasdfdateeval
1条回答
网友
1楼 · 发布于 2024-10-02 10:22:59

可复制示例中的问题是,您有字符串。在您给出的关于High-Performance Pandas: eval() and query()的链接中,所有示例都带有float(或int)。在

使用python作为一个示例,让它工作起来:

df.eval('A+B',engine='python')

默认情况下,eval中使用的引擎根据documentation'numexpr',此引擎使用同名的库NumExpr,这是一个NumPy的快速数值表达式求值器。尽管在上一个链接中,给出了一个字符串示例,但它不是通过操作+实现的。如果您这样做,df.eval('A==B')它可以工作,与其他比较运算符相同,但不是{}。您可以找到更多信息there,但是对于字符串,除了使用engine='python'之外,它似乎是有限的。在

回到您最初的问题,使用日期时间类型,不确定是否可以使用默认引擎(see here for supported datatype)找到解决方案

相关问题 更多 >

    热门问题