2017-05-03 47 views
0

我想將循環中生成的表中的列追加到數據框中。我希望用pandas.merge來完成這個,但它似乎並沒有爲我工作。使用熊貓在循環中加入和追加列

我的代碼:

from datetime import date 
from datetime import timedelta 
import pandas 
import numpy 
import pyodbc 

date1 = date(2017, 1, 1) #Starting Date 
date2 = date(2017, 1, 10) #Ending Date 

DateDelta = date2 - date1 
DateAdd = DateDelta.days 
StartDate = date1 
count = 1 

# Create the holding table 
conn = pyodbc.connect('Server Information') 
**basetable = pandas.read_sql("SELECT....") 

while count <= DateAdd: 
    print(StartDate) 
    **datatable = pandas.read_sql("SELECT...WHERE Date = "+str(StartDate)+"...") 
    finaltable = basetable.merge(datatable,how='left',left_on='OrganizationName',right_on='OrganizationName') 
    StartDate = StartDate + timedelta(days=1) 
    count = count + 1 
print(finaltable) 

縮短爲簡潔起見的select語句,但表生成這個樣子的:

** Basetable

School_District 
--------------- 
District_Alpha 
District_Beta 
... 
District_Zed 

**的DataTable

School_District|2016-01-01| 
---------------|----------| 
District_Alpha | 400  | 
District_Beta | 300  | 
...   | 200  | 
District_Zed | 100  | 

我有寫的數據表,所以列採用爲特定循環選擇的日期的名稱,所以列名可以是唯一的,一旦我得到這個啓動和運行。然而,我的問題是,上面的代碼只產生一列數據。我有一個很好的猜測,爲什麼:只有最後一個合併正在處理 - 我認爲使用pandas.append將是解決這個問題的方法,但pandas.append不像合併那樣「加入」。是否有其他方式來完成一種加入&使用熊貓追加?我的目標是保持這種靈活性,以便根據我們的數據需求輕鬆輸入其他日期。

最後,我希望看到的是:

School_District|2016-01-01|2016-01-02|... |2016-01-10| 
---------------|----------|----------|-----|----------| 
District_Alpha | 400  | 1  |  | 45  | 
District_Beta | 300  | 2  |  | 33  | 
...   | 200  | 3  |  | 5435 | 
District_Zed | 100  | 4  |  | 333 | 

回答

1

你的錯誤是在聲明中finaltable = basetable.merge(datatable,...)。在每次循環迭代時,您將原始basetable與新的datatable合併,將結果存儲在finaltable中並丟棄它。你需要的是basetable = basetable.merge(datatable,...)。沒有finaltable s。

+0

好吧,這很尷尬 - 這是一個簡單的修復。感謝您的幫助。 – userPinealbody