如何将pyodbc查询结果列表转换为多列Pandas DataFrame?
解决pyodbc查询结果转Pandas DataFrame成单列的问题
问题根源
你通过pyodbc获取的db_out里的每个元素是pyodbc的Row对象,而非Python原生的列表/元组。虽然打印出来的样子和列表类似,但Pandas无法识别这种特殊对象,会把每个Row当作单个单元格处理,最终形成单列结构。
解决办法
办法一:转换Row对象为原生列表/元组
先把db_out中的每个元素转换为列表,再生成DataFrame:
# 将每个Row对象转为原生列表 converted_data = [list(row) for row in db_out] # 定义列名 columns = ['col1','col2','col3','col4','col5','col6','col7','col8','col9','col10','col11','col12','col13'] # 生成多列DataFrame my_new_data_frame = pd.DataFrame(converted_data, columns=columns)
办法二:直接用Pandas的read_sql查询(更高效)
跳过手动处理pyodbc结果的步骤,让Pandas直接完成查询和DataFrame转换:
import pyodbc import pandas as pd # 构建Access数据库连接字符串 conn_str = r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=你的数据库文件路径.accdb;' conn = pyodbc.connect(conn_str) # 执行查询并直接得到正确结构的DataFrame query = "SELECT 你的查询字段 FROM 你的表名" my_data_frame = pd.read_sql(query, conn) # 关闭数据库连接 conn.close()
这种方式还能自动复用数据库中的列名,无需手动定义(如果需要自定义列名,后续用my_data_frame.columns = columns修改即可)。
内容的提问来源于stack exchange,提问作者JFranco
相关产品推荐
相关产品推荐

