前言

提示:需要技术基础和库: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上手快速友好易学

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐