Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
428 views
in Technique[技术] by (71.8m points)

python - Using local variables with multiple assignments with pandas eval function

The pandas help file says (for eval): As a convenience, multiple assignments can be performed by using a multi-line string.

However, I'm finding that doesn't work with variables (using ipython):

This works:

df_price.eval("op = op * @mult", inplace = True)

But this does NOT work (op, cl, hi, lo are cols in dataframe df_price where mult is a float):

df_price.eval("""op = op * @mult
              cl = cl * @mult
              hi = hi * @mult
              lo = lo * @mult""", inplace = True)

error: pandas.computation.ops.UndefinedVariableError: local variable 'mult' is not defined

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I can confirm that the local variables appear to only work on the first line of a multi line eval expression. A possible work around:

df_price.eval("""mult = @mult
              op = op * mult
              cl = cl * mult
              hi = hi * mult
              lo = lo * mult""", inplace = True)

This does however have the side effect of creating an extra column.

Update:

I have submitted a Pull Request with a fix for this issue.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...