使用Pandas在循环中连接和追加列

时间:2017-05-03 23:33:23

标签: python sql-server pandas

我想将循环中生成的表中的列追加到数据帧中。我希望使用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)

为了简洁起见缩短了选择语句,但生成的表格如下:

** Basetable

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

**数据表

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

我编写了数据表,因此该列采用为该特定循环选择的日期的名称,因此一旦我启动并运行,列名称可以是唯一的。但问题是,上面的代码只生成一列数据。我有一个很好的猜测:为什么:只处理最后一次合并 - 我认为使用pandas.append将是解决这个问题的方法,但是pandas.append没有&#34;加入& #34;像合并一样。是否有其他方法可以实现一种加入&amp; amp;使用熊猫追加?我的目标是保持灵活性,以便根据我们的数据需求轻松输入其他日期。

最后,我想看到的是:

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 个答案:

答案 0 :(得分:1)

您的错误出现在finaltable = basetable.merge(datatable,...)声明中。在每次循环迭代中,您将原始basetable与新datatable合并,将结果存储在finaltable ...中并将其丢弃。你需要的是basetable = basetable.merge(datatable,...)。没有finaltable s。