最佳用SQL查询excel表格数据方法
本文介绍了一种使用Python、Pandas和DuckDB快速处理本地Excel表格数据的方法。通过将Pandas读取的DataFrame注册为DuckDB临时表,用户可以使用SQL语句高效查询和处理数据。核心函数load_df_data实现了DataFrame的注册、SQL处理和结果表返回功能。相比纯Pandas处理,该方法显著提升了大数据量下的处理效率,且SQL语法更易上手。文章还建议了可能的
前言
提示:需要技术基础和库:python,pandas,duckdb
例如:小型公司内可能缺少数据库,在转型前excel表格类型居多,当表格数据量大,且数据分散规整,则可以用本文档提供的方法来快速查询结果,速度飞快,(本方法默认是xlsx格式来读取,配置python环境不讲解,教程较多)
逻辑:pandas读取本地表格为df后,交给duckdb库,将结果当作临时表存放,运行期间,全局内部可以调用临时表来链表查询等,并将临时表return出去,方便保存到本地检查这个临时表的数据
一、使用步骤
1.核心代码
代码如下(示例):
import pandas as pd import duckdb con = duckdb.connect(database=':memory:')
def load_df_data(df, sql, table_name, src_table_name='dk_dual'):
"""
df: 输入的DataFrame
sql: 处理用的SQL语句,表名用src_table_name
table_name: 结果注册成的表名
src_table_name: 输入df注册成的临时表名,默认'dk_dual'
"""
con.register(src_table_name, df) # 注册输入df为临时表
result_df = con.execute(sql).fetchdf() # 用SQL处理
con.register(table_name, result_df) # 注册结果为新表
return result_df
2.读取数据
代码如下(示例):
from_df = pd.read_excel('自己本地的xlsx路径') # 使用pandas读取本地表格数据
load_df_data(from_df, f'select * from dk_dual', 'all_sale_df') # 这是不保存DF只制作中间表
# 这里演示SQL变量传递和保存到本地
find_sql = f'''
select
编码
,coalesce(sum(金额),0) as 金额
from dk_dual
group by 编码
'''
kucun = load_df_data(from_df, find_sql, 'kucun') # 临时表命名kucun,并return
kucun.to_excel('D:/test.xlsx', sheet_name='数据的聚合', index=False) # 将上文df保存到本地,方便检查中间表结果是否正确
也可以将sql参数外置,方便自己填写,但此时的SQL是duckdb的SQL,与mysql的SQL有细微差别,遇到问题可以搜索用法
最后
可升级的部分:有技术小伙伴可以尝试将pandas集成到函数内更加方便(我没集成因为可以如果有上文pandas加工的数据传递给函数二次加工更加方便),如果本地是大量csv或者别的表格形式,可以调整pandas读取入口。如果有疑问或者错误,请在评论区和谐沟通
速度对比:之前用pandas做数据,函数繁琐速度不佳,可视性很差,换成duckdb处理效率提升巨大,且SQL上手快速友好易学
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)