没错,之前我也不知道SQL语言除了可以查询(本文只讨论查询语句)数据库,还可以查询Excel,或者说经过一定处理后,可以像查询数据库一样查询Excel。
下面给出一个场景,假如你有几个(个数未知)Excel表格,你想在这些表格上实现SQL多表查询,该怎么办?
像这样:
学号 | 姓名 |
1054 | 小姜 |
1055 | 小王 |
1061 | 小李 |
1081 | 王哥 |
课程名称 | 任课老师 |
人工智能 | 王老师 |
数据库 | 李老师 |
运筹学 | 张老师 |
概率论 | 郝老师 |
学号 | 课程名称 | 分数 |
1054 | 人工智能 | 90 |
1055 | 数据库 | 91 |
1061 | 运筹学 | 92 |
1081 | 概率论 | 91 |
1054 | 运筹学 | 89 |
1055 | 概率论 | 91 |
1061 | 人工智能 | 95 |
1081 | 数据库 | 94 |
大致思路如下:
- 将所有要导入的Excel表放入一个.xlsx文件中,将各Sheet命名为表名,类似数据库的table名;
- 利用pandas库读取.xlsx文件并创建为一个ExcelFile类;
- 利用类中名为sheet_names的property获取其所有该文件所有的Sheet名;
- 用locals和read_excel函数创建名为各sheet名,值为各sheet内容的局部变量;
-
利用pandasql库中的sqldf来查询一个或多个dataframe,sqldf函数默认查询所有局部变量中的dataframe。
代码如下:
import pandas as pd
from pandasql import sqldf
def dealwith_excel(excel_file,sql_query):
xls = pd.ExcelFile(excel_file)
sheet_names = xls.sheet_names #list type
# print(sheet_names)
for sheet_name in sheet_names:
locals()[sheet_name] = pd.read_excel(excel_file, sheet_name=sheet_name)
df_result = sqldf(sql_query)
return df_result
最后返回的就是查询结果!
感谢支持