Python RecursionError : Simple operation crashes with Pandas.eval()
Python RecursionError : Simple operation crashes with Pandas.eval()
我刚刚读完 these newly found optimization functions 并为我的 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
和 Heure
,它们是字符串。
我的目标:将两列连接成一列。我可以用这段代码轻松地做到这一点:df_exade_light["Date"]+df_exade_light["Heure"]
,在其上应用 %timeit
returns
6.07 ms ± 219 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
但由于某些原因df.eval('Date + Heure')
returns a :
RecursionError: maximum recursion depth exceeded
此外,我应用 this thread 中找到的解决方案来提高允许的堆栈深度,但内核崩溃了。
这是什么原因?我做错了什么吗?
问题可以用这段代码重现:
import pandas as pd
df = pd.DataFrame({'A': ['X','Y'],
'B': ['U','V']})
df.eval('A+B')
您的可重现示例中的问题是您有 string。在你给出的link中,关于High-Performance Pandas: eval() and query(),所有的例子都带有float(或int)。
使其适用于您的示例的一种方法是使用 python 作为引擎:
df.eval('A+B',engine='python')
默认情况下,eval
中使用的引擎根据 documentation and this engine use the library of the same name NumExpr, which is a Fast numerical expression evaluator for NumPy. Although in the previous link, an example with string is presented, it is not with the operation +. If you do df.eval('A==B')
it works, same with other comparison operators, but not df.eval('A+B')
. You can find more information there 是 'numexpr'
但对于 string,除了使用 [=15] =] 似乎是有限的。
回到 date 和 time 类型的原始问题,不确定是否可以使用默认引擎找到解决方案(see here for supported datatype)
我刚刚读完 these newly found optimization functions 并为我的 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
和 Heure
,它们是字符串。
我的目标:将两列连接成一列。我可以用这段代码轻松地做到这一点:df_exade_light["Date"]+df_exade_light["Heure"]
,在其上应用 %timeit
returns
6.07 ms ± 219 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
但由于某些原因df.eval('Date + Heure')
returns a :
RecursionError: maximum recursion depth exceeded
此外,我应用 this thread 中找到的解决方案来提高允许的堆栈深度,但内核崩溃了。
这是什么原因?我做错了什么吗?
问题可以用这段代码重现:
import pandas as pd
df = pd.DataFrame({'A': ['X','Y'],
'B': ['U','V']})
df.eval('A+B')
您的可重现示例中的问题是您有 string。在你给出的link中,关于High-Performance Pandas: eval() and query(),所有的例子都带有float(或int)。
使其适用于您的示例的一种方法是使用 python 作为引擎:
df.eval('A+B',engine='python')
默认情况下,eval
中使用的引擎根据 documentation and this engine use the library of the same name NumExpr, which is a Fast numerical expression evaluator for NumPy. Although in the previous link, an example with string is presented, it is not with the operation +. If you do df.eval('A==B')
it works, same with other comparison operators, but not df.eval('A+B')
. You can find more information there 是 'numexpr'
但对于 string,除了使用 [=15] =] 似乎是有限的。
回到 date 和 time 类型的原始问题,不确定是否可以使用默认引擎找到解决方案(see here for supported datatype)