Pandas 用户手册——表达式求值eval()

结合实际案例,所有操作都是本人亲自实践,作为以后自己使用pandas时的用户手册。

目录

1 支持的语法

2 例子说明

3 内容表达

4 局部变量

5 解析器

6 实例分析


1 支持的语法

pd.eval()具有3个特点:

(1)DataFrame数量很大(一般超过10000行)时更高效;

(2)基本的运算、布尔表达等速度非常快,具体支持的语法为:

  • 算术运算,比如df+2*Pi
  • 比较,比如df>2
  • 列表或元组,比如[1,2]
  • 属性,比如df['A']
  • 下标表达式,比如df[2]
  • 数学函数,比如sin/log/exp等

(3)有一些语法,是不建议使用的:

  • 函数
  • is/not is
  • if表达
  • lambda表达
  • Generator

2 例子说明

我创建了4个20000*100的表格,来看eval()在简单运算所带来的提升。

rows,columns=20000,100
test1,test2,test3,test4=[pd.DataFrame(np.random.randn(rows,columns)) for i in range(4)]

3 内容表达

我们还可以直接把简明的表达式写入eval(),此时表达式不用前面加入表格名称。

下面是名称为“expression_table”的表格:

# 通过eval()表达
expression_table.eval('C=A+B',inplace=True)
# 通过原来的Pands表达
expression_table['C']=expression_table['A']+expression_table['B']

4 局部变量

如果eval()中调用局部变量,必须前面引用“@”,否则pandas会报错。

# 局部变量
column_new=np.random.randn(len(expression_table))
expression_table.eval("E=B+@column_new",inplace=True)

5 解析器

eval()有两种解析器,一种是通常使用的"pyhton"解析器,一种是更加直白简单的“pandas”解析器。

6 实例分析

下面两个图是别人分析的,用于演示eval()表现效果的示意图。

(1)当数据量少的时候,比如10000-20000左右,pandas和eval()区别不大:

(2)当数据量达到一定量级,eval()的优势就越来越大:

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值