在python中将查询结果转换为DataFrame

mag*_*ggs 2 python psycopg2 dataframe pandas

我试图使用psycog2对查询结果进行操作.因此我必须将结果转换为pandas DataFrame.但是,当我使用以下代码并打印时,只打印列名而不是行.我也使用'pd.DataFrame.from_records',但这不起作用.

import psycopg2
import pandas as pd
import numpy as np
conn_string = "Connect_Info"
conn = psycopg2.connect(conn_string)
cursor = conn.cursor()
cursor.execute(query)
rows=pd.DataFrame(cursor.fetchall(),columns=['page_num','Frequency'])

for row in rows:
   print row

conn.commit();
conn.close();
Run Code Online (Sandbox Code Playgroud)

cursor.fetchall()的结果 -

(1L, 90990L)
(3L, 6532L)
(2L, 5614L)
(4L, 4016L)
(5L, 2098L)
(6L, 1651L)
(7L, 1158L)
(8L, 854L)
(9L, 658L)
(10L, 494L)
(11L, 345L)
(12L, 301L)
(13L, 221L)
(15L, 152L)
(14L, 138L)
(16L, 113L)
(17L, 93L)
(18L, 73L)
(20L, 62L)
(19L, 55L)
(22L, 44L)
(21L, 35L)
(23L, 29L)
(25L, 24L)
(27L, 19L)
(26L, 18L)
Run Code Online (Sandbox Code Playgroud)

jor*_*ris 10

也许不是直接回答你的问题,但你应该用read_sql_query它来代替自己进行fetchall并包装DataFrame.这看起来像:

conn = psycopg2.connect(...)
rows = pd.read_sql_query(query, conn)
Run Code Online (Sandbox Code Playgroud)

而不是上面的所有代码.

有关您的实际问题,请参阅http://pandas.pydata.org/pandas-docs/stable/basics.html#iteration以获取解释和不同选项.
基础是迭代数据帧,遍历列名称.遍历行,你可以使用其他功能,如.iterrows().itertuples().但请记住,在大多数情况下,不需要手动迭代行.