我刚刚读过书,兴奋得流口水,因为我的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}$
可复制示例中的问题是,您有字符串。在您给出的关于High-Performance Pandas: eval() and query()的链接中,所有示例都带有float(或int)。在
使用python作为一个示例,让它工作起来:
默认情况下,}。您可以找到更多信息there,但是对于字符串,除了使用
eval
中使用的引擎根据documentation是'numexpr'
,此引擎使用同名的库NumExpr,这是一个NumPy的快速数值表达式求值器。尽管在上一个链接中,给出了一个字符串示例,但它不是通过操作+实现的。如果您这样做,df.eval('A==B')
它可以工作,与其他比较运算符相同,但不是{engine='python'
之外,它似乎是有限的。在回到您最初的问题,使用日期和时间类型,不确定是否可以使用默认引擎(see here for supported datatype)找到解决方案
相关问题 更多 >
编程相关推荐