2016-07-04 65 views
2

我越來越多地瞭解python,從低效的循環列表轉移到列表列表並且一直在學習numpy/pandas。從sqlite數據庫有效地添加新的列到熊貓數據框

比方說,我有一個熊貓數據幀DF,例如一些看起來像:

| id | Year | Value | 
--------------------- 
| 1 | 2015 | 1.00 | 
| 1 | 2014 | 0.80 | 
| 2 | 2015 | 1.10 | 
| 3 | 2015 | 0.6 | 

現在我將如何有效地蟒蛇,查詢我的數據庫基礎上的價值觀在特定的列中,然後將查詢的值附加到新列中。現在我的代碼看起來像這樣

uIDs = set(df['id']) 
uIDs = ",".join([str(x) for x in uIDs]) 

with dbconnection as con: 
    data = con.execute("SELECT id, value2 FROM table WHERE ids IN ("+uIDs")") 

for i in data.fetchall(): 
    df[df['id'] == i[0]]['newcol'] = i[1] 

對不起,我在代碼的任何錯誤,我打字了我的頭舉一個例子。

正如您所看到的,我試圖從熊貓數據框中提取所有唯一ID,從數據庫中選擇新值,然後迭代循環遍歷它們以追加到數據框中的新列。

有沒有更有效/高效/ pythonic的方式來做到這一點?如果你看的不僅僅是3個,而且還有3,000或者3萬行,這是最好的方法嗎?

回答

2

既然你想要一個SQL風格左加入,只需使用

pd.merge(df, data.fetchall(), on='id', how='left')