2012-07-05 249 views
1

我在使用Pandas 0.8查詢底層PostgreSQL數據庫。 Pandas正確返回DataFrame,但是我的數據庫中的底層時間戳列正在Pandas中作爲通用「對象」類型返回。正如我最終希望對數據進行季節性規範化一樣,我很好奇如何將此通用「對象」列轉換爲適合分析的內容。將對象轉換爲DateRange

這裏是我當前的代碼檢索數據:

# get timestamp with time zone Pandas example 
import pandas.io.sql as psql 
import psycopg2 

# define query 
QRY = """ 
    select 
     i i, 
     i * random() f, 
     case when random() > 0.5 
     then 
      true 
     else 
      false 
     end b, 
     (current_date - (i*random())::int)::timestamp with time zone tsz 
    from 
     generate_series(1,1000) as s(i) 
    order by 
     4 
    ; 
""" 
CONN_STRING = "host='localhost' port=5432 dbname='postgres' user='postgres'" 

# connect to db 
conn = psycopg2.connect(CONN_STRING) 

# get some data set index on relid column 
df = psql.frame_query(QRY, con=conn) 

print "Row count retrieved: %i" % (len(df),) 

結果在Python:

<class 'pandas.core.frame.DataFrame'> 
Int64Index: 1000 entries, 0 to 999 
Data columns: 
i  1000 non-null values 
f  1000 non-null values 
b  1000 non-null values 
tsz 1000 non-null values 
dtypes: bool(1), float64(1), int64(1), object(1) 

而有趣的是第一列,「我」,是PG的整數關口。我不確定Pandas爲什麼認爲這是一個「bool」類型的專欄。我真正的問題是「對象」列,我認爲我需要使用某種類型的時間戳。

+0

我對你在這裏做什麼感到困惑。 QRY的真假部分是不是解釋了我爲你舉例的布爾本質?也許我們需要查看數據庫模式。 –

回答

0

列出的dty按字母順序排列。 tsz列可能包含datetime.datetime Python對象(通常由時間戳列的數據庫驅動程序返回),你看過嗎?