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

时间:2015-07-17 10:12:58

标签: python pandas dataframe psycopg2

我正在尝试使用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();

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)

3 个答案:

答案 0 :(得分:10)

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

conn = psycopg2.connect(...)
rows = pd.read_sql_query(query, conn)

而不是上面的所有代码。

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

答案 1 :(得分:3)

这正是迭代数据帧时应该发生的事情,您会看到列名称。如果你想看到df只打印df。要查看行:

for ind, row in df.iterrows(): 
    print(row.values)

或.values:

for row in df.values:
   print(row)

答案 2 :(得分:0)

另一个建议是使用itertuples,它产生(index,row_value1,row_value2 ...)元组。

for tup in rows.itertuples():
    print tup

'(0, 1, 90990)
(1, 3, 6532)
(2, 2, 5614)
(3, 4, 4016)
...'

你可以看到第一个位置是索引,socend是第一列的值,第二个是第二列的值。