SQL-On-Pandas加速数据科学

本文介绍了一个将SQL与Pandas结合的项目,旨在利用SQL的易读性和维护性,加速数据科学中的数据处理。现有开源项目存在限制,如不支持更新或仅支持简单SQL。该实现通过正则表达式和SQL解析将SQL转换为Pandas语法,支持特定类型的更新和多表联合更新,以及自定义Python函数。通过globals()和exec()函数执行转换后的代码,提高效率。
摘要由CSDN通过智能技术生成

SQL-On-Pandas加速数据科学

1. 背景

Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

在工作中经常操作数据表会有这样一种感受,在某些具体的统计分析等场景下是pandas比较高效,但是在快速迭代的业务场景下,pandas的代码重构和数据分析就显得繁琐了,而且代码的可读性没有SQL好。基于这样的需求,萌生了将SQL和pandas相结合的想法,即用写SQL代码,将SQL转成pandas的语法然后执行得到结果。如果直接用数据库作为存储用SQL重构,不仅工作量大,而且有些业务逻辑的函数是SQL无法实现的,这也是为什么要以pandas为基础,经SQL转成pandas执行,而不是反过来,将pandas dataframe导入到数据库用SQL重构。

SQL与pandas语法哪个简洁,我们看如下比较,功能都是实现子集的操作:

-- sql 
update table1 set age=score+levels where id>=5
-- sql 
update table1 a set a.age=b.age+2 join table2 b on a.id=b.id where a.age>2 and b.age<10
# pandas 
table1.loc[table1['id']>5,'age']=table1.loc[table1['id']>5,'score']+table1.loc[table1['id']>5,'levels]
# pandas 
table2.rename(columns={'id':'id2','age':age2'}, inplace=True)
table1=pd.merge(left=table1, right=table2[['id2','age2']], left_on='id',right_on='id2', how='inner')
loc=table1['age']>2 & table1['age2']<10
table1.loc[loc, 'age']=table1.loc['age2']+2

感受下上面实现同样的功能,但是代码量完全不同,特别是第二种情况,明显是SQL

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值