python - 将 psycopg2 DictRow 查询转换为 Pandas 数据框

标签 python pandas psycopg2

我想转换一个 psycopg2 DictRow查询 pandas 数据框,但 pandas 一直提示:

curs = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
curs.execute("SELECT * FROM mytable")
data = curs.fetchall()

print type(data)
print pd.DataFrame(list(data))

但是,尽管我专门传递了一个list,但我总是报错???

<type 'list'>
TypeError: Expected list, got DictRow

如果我执行 pd.DataFrame(data) 结果是一样的,有人可以帮我完成这项工作吗?

如果数据框的列名有效(即提取 DictRow 并将它们传递给数据框),那就太好了。

更新:
由于我需要处理数据,因此我想按原样使用来自 psycopg2 查询的数据,而不是 pandas approach。 ,例如read_sql_query .

最佳答案

嗯,我最终找到了这个 hacky 解决方案:

print pd.DataFrame([i.copy() for i in data])

DictRow 类的copy() 函数将返回一个实际的字典。通过列表理解,我创建了一个(相同的)字典列表,Pandas 会很乐意接受。

我仍然不明白为什么 list(data) 会产生一个 TypeError。也许还有人可以启发我。

关于python - 将 psycopg2 DictRow 查询转换为 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35604186/

相关文章:

python - psycopg creata 数据库失败,语法错误

python - 扭曲的 adbapi 关闭自动提交(psycopg2)

python - 使用 Python 和 Psycopg2 将 JSON 数据文件导入 PostgreSQL

python - 将数据从 Google App Engine 导出到 csv

python - 在 Pandas 数据框列中存储不同值的最佳方式?

python - 如何根据列表移动数据框中的值?

python-3.x - 来自 Excel 文件的 Pandas 数据框中的双 "melt"

python - 如何从 wsgi 应用程序返回 apache 错误页面?

python - 监控节点集群

python - 转换为 float 时,使用 pyserial 解释字节流很困难