gpt4 book ai didi

python - 将 SQL 查询导入 Pandas 结果只有 1 列

转载 作者:太空宇宙 更新时间:2023-11-03 14:00:27 24 4
gpt4 key购买 nike

我正在尝试将复杂 SQL 查询的结果导入到 pandas 数据框中。我的查询要求我创建几个临时表,因为我想要的最终结果表包含一些聚合。我的代码如下所示:

    cnxn = pyodbc.connect(r'DRIVER=foo;SERVER=bar;etc')
cursor = cnxn.cursor()
cursor.execute('SQL QUERY HERE')
cursor.execute('SECONDARY SQL QUERY HERE')
...
df = pd.DataFrame(cursor.fetchall(),columns = [desc[0] for desc in cursor.description])

我收到一条错误消息,告诉我形状不匹配:

    ValueError: Shape of passed values is (1,900000),indices imply (5,900000)

事实上,所有 SQL 查询的结果应该是一个包含 5 列而不是 1 列的表。我使用 Microsoft SQL Server Management Studio 运行了 SQL 查询,它运行并返回了我想要的 5 列表。我试图不将任何列名传递到数据框并打印出数据框的头部,发现 Pandas 已将 5 列中的所有信息放入 1。每行中的值是一个由逗号分隔的 5 个值的列表, 但 pandas 将整个列表视为 1 列。 Pandas 为什么要这样做?我也尝试过 pd.read_sql 路线,但我仍然遇到同样的错误。

编辑:

考虑到评论,我做了更多的调试。该问题似乎并非源于我的查询是嵌套的。我尝试了一个简单的(一行)查询来返回一个 3 列表,但我仍然遇到同样的错误。打印出 fetchall() 看起来像这样:

    [(str1,str2,str3,datetime.date(stuff),datetime.date(stuff)), 
(str1,str2,str3,datetime.date(stuff),datetime.date(stuff)),...]

最佳答案

改用pd.DataFrame.from_records:

df = pd.DataFrame.from_records(cursor.fetchall(),
columns = [desc[0] for desc in cursor.description])

关于python - 将 SQL 查询导入 Pandas 结果只有 1 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49739123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com