我想转换一个 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/