如何用Pandas+SQLite3访问Excel指定工作表并统计数量
问题解决:用Pandas+SQLite处理Excel工作表的正确方式
你的代码问题出在sqlite3不能直接连接.xlsx文件——sqlite3.connect()是用来连接SQLite数据库(.db格式)的,你之前的操作其实是创建了一个名为data.xlsx的空SQLite数据库,所以查不到任何表数据。
下面分两种场景解决你的需求:
一、直接用Pandas实现(最简便,无需SQLite)
如果只是要统计工作表数量、读取指定工作表,直接用Pandas的ExcelFile即可:
import pandas as pd # 加载Excel文件 excel_handler = pd.ExcelFile("data.xlsx") # 1. 统计工作表数量 total_sheets = len(excel_handler.sheet_names) print(f"工作表总数:{total_sheets}") print("所有工作表名称:", excel_handler.sheet_names) # 2. 访问指定工作表 # 按名称读取 target_df = excel_handler.parse("目标工作表名称") # 或者按索引读取(比如第1个工作表,索引从0开始) # target_df = excel_handler.parse(excel_handler.sheet_names[0]) # 查看数据 print(target_df.head())
二、结合SQLite3实现(先导入Excel数据到SQLite)
如果一定要用SQLite操作,需要先把Excel的每个工作表导入到SQLite数据库中,再进行查询:
import pandas as pd import sqlite3 # 1. 读取Excel文件 excel_handler = pd.ExcelFile("data.xlsx") sheet_list = excel_handler.sheet_names # 2. 连接SQLite数据库(会自动创建data.db文件) conn = sqlite3.connect("data.db") # 3. 将所有工作表导入为SQLite的表 for sheet_name in sheet_list: df = excel_handler.parse(sheet_name) # 工作表名作为SQLite表名,if_exists="replace"表示覆盖已有表 df.to_sql(sheet_name, conn, index=False, if_exists="replace") # 4. 查询所有表(对应原Excel的工作表) sheet_info = pd.read_sql("SELECT name FROM sqlite_master WHERE type='table';", conn) print("导入后的工作表(SQLite表):") print(sheet_info) print(f"工作表总数:{len(sheet_info)}") # 5. 访问指定工作表(通过SQL查询) target_data = pd.read_sql("SELECT * FROM 目标工作表名称;", conn) print(target_data.head()) # 关闭数据库连接 conn.close()
内容的提问来源于stack exchange,提问作者Temp4 Watch
相关产品推荐
相关产品推荐

