I have the following code:
import numpy as np
import pandas as pd
length = 100
test = pd.DataFrame({
"number1": np.random.randint(1,11,size=length),
"sign1": np.random.choice(['*', '/'], length),
"number2": np.random.randint(1,11,size=length),
"sign2": np.random.choice(['+', '-'], length),
"number3": np.random.randint(1,101,size=length),
"random": np.random.randint(1,101,size=length),
})
test["result"] = pd.eval(test["number1"].astype(str)+test["sign1"]+test["number2"].astype(str)+\
test["sign2"]+test["number3"].astype(str))
where I generate some random equations and then solve them. All is working nicely if length
is less than 101. If I set it to more, I get:
ValueError Traceback (most recent call last)
<ipython-input-87-5a65a900fe72> in <module>
14 })
15
---> 16 test["result"] = pd.eval(test["number1"].astype(str)+test["sign1"]+test["number2"].astype(str)+\
17 test["sign2"]+test["number3"].astype(str))
~/anaconda3/lib/python3.8/site-packages/pandas/core/computation/eval.py in eval(expr, parser, engine, truediv, local_dict, global_dict, resolvers, level, target, inplace)
344 eng = _engines[engine]
345 eng_inst = eng(parsed_expr)
--> 346 ret = eng_inst.evaluate()
347
348 if parsed_expr.assigner is None:
.
.
.
ValueError: unknown type object
Why? What is happening? And how do I fix it?
It is bug, need processing each value separately by apply
or map
:
test["result"] = (test["number1"].astype(str)+test["sign1"]+test["number2"].astype(str)+\
test["sign2"]+test["number3"].astype(str)).apply(pd.eval)
test["result"] = (test["number1"].astype(str)+test["sign1"]+test["number2"].astype(str)+\
test["sign2"]+test["number3"].astype(str)).map(pd.eval)