相关疑难解决方法(0)

使用pd.eval()在pandas中进行动态表达式评估

目标和动机

pd.eval并且eval是pandas API套件中功能强大但被低估的功能,它们的使用远未完全记录或理解.小心适量,eval并且engine可以极大地简化代码,提高性能,并成为创建动态工作流的强大工具.

这个规范QnA的目的是让用户更好地理解这些功能,讨论一些鲜为人知的功能,如何使用它们,以及如何最好地使用它们,以及清晰易懂的示例.这篇文章将讨论的两个主要议题是

  1. 了解parser,df2x在争论pd.eval,以及它们如何被用来计算表达式
  2. 了解之间的差eval,eval并且engine,当每个功能是合适的用于动态执行.

这篇文章不能替代文档(答案中的链接),所以请完成它!


我将以这样的方式构建一个问题,以便开启对所支持的各种功能的讨论parser.

给出两个DataFrame

np.random.seed(0)
df1 = pd.DataFrame(np.random.choice(10, (5, 4)), columns=list('ABCD'))
df2 = pd.DataFrame(np.random.choice(10, (5, 4)), columns=list('ABCD'))

df1
   A  B  C  D
0  5  0  3  3
1  7  9  3  5
2  2  4  7  6
3  8  8  1  6
4  7  7  8  1

df2
   A  B  C …
Run Code Online (Sandbox Code Playgroud)

python eval dataframe pandas

45
推荐指数
2
解决办法
7156
查看次数

在 pandas eval 中调用 round()、ceiling()、floor()、min()、max()

正如标题所说,有没有办法在 pandas eval 中支持 round、ceiling、min、max、floor 函数。

数据框:

import pandas as pd
import numexpr as ne
op_d = {'ID': [1, 2,3],'V':['F','G','H'],'AAA':[0,1,1],'E':[102014,112019,122017] ,'D':['2019/02/04','2019/02/01','2019/01/01'],'DD':['2019-12-01','2016-05-31','2015-02-15'],'CurrentRate':[7.5,2,2],'NoteRate':[2,3,3],'BBB':[0,00,4],'Q1':[2,8,00],'Q2':[3,5,7],'Q3':[5,6,8]}
df = pd.DataFrame(data=op_d)
Run Code Online (Sandbox Code Playgroud)

abs() 和 sqrt() 函数与 pandas eval 一起使用。IE

df.eval('TT = abs(sqrt(Q1+Q2)-Q2)',inplace=True)
df
Run Code Online (Sandbox Code Playgroud)

谁能建议如何访问 eval 中的其余函数?我还尝试了 eval 中的“local_dict”,看看是否可以定义自定义函数并调用它们,但它不起作用。

笔记:

  1. 这些函数内部的算术运算是必要的(即求和、乘法、两列的除法)。
  2. 我知道有关使用“eval”函数和采取必要测量的问题。

python eval pandas

5
推荐指数
1
解决办法
4311
查看次数

将参数传递给 python eval()

我正在做遗传编程框架,我需要能够执行一些代表完整Python程序的字符串。我正在使用Python 2.7。我有一个配置类,其中定义了原始集。可以说

class Foo():
    def a(self,x):
        return x

    def b(self,y):
        return y
Run Code Online (Sandbox Code Playgroud)

我正在使用 python 检查模块提取函数,并且我想创建一些包含导入和所有内容的可执行源代码。我最终得到了一个看起来像这样的字符串

import sys

def a(x,y):
    return x

def b(y):
    return y

def main(x,y)
    lambda x,y: a(b(y),a(x,y))

main(*sys.argv)
Run Code Online (Sandbox Code Playgroud)

我的问题是我不知道如何将命令行参数传递给我正在运行的字符串eval()如何将命令行参数传递给我想要运行的源文件eval()

编辑:有数百万人,因此写入文件并不是一个好的选择。

编辑:我犯了一个错误。eval() 方法仅用于表达式而不是语句,因此使用 exec() 是正确的方法

python code-generation eval argument-passing

3
推荐指数
1
解决办法
1万
查看次数