09多只股票合在一起

现在我们需要一起处理好几只股票的数据。
我们现在有这样的一个列表:
symbols = ['GOOG','IBM','GLD']我们想一下把这几个研究对象的数据都放到python中。我们需要用一个循环,做几次合并。
我们直接就在下面,增加代码。

import pandas as pd
def test_run():
    start_date = '2013-01-01'
    end_date = '2013-01-07'
    dates = pd.date_range(start_date,end_date)
    df1 = pd.DataFrame(index = dates)
    #print df1
    dfSPY = pd.read_csv("data/SPY.csv",index_col='Date',parse_dates = True,
                        usecols=['Date','Adj Close'],na_values=['nan'])
    #print dfSPY
    df1 = df1.join(dfSPY,how = "inner")
    
    symbols = ['GOOG','IBM','GLD']
    for symbol in symbols:
        df_temp = pd.read_csv("data/{}.csv".format(symbol),index_col = 'Date',
                              parse_dates=True,usecols=['Date','Adj Close'],
                              na_values = ['nan'])
        df1 = df1.join(df_temp)
    
    
    print df1

if __name__ == '__main__':
    test_run()
运行结果错误

运行结果告诉我们的列名称中存在重复。因为按照这个程序,我们每一列的名字都是Adj Close。我们希望我们每一列的名字都是制定的符号。我们需要进一步优化。
先把SPY命名好,我们需要这样的代码:
dfSPY = dfSPY.rename(columns={'Adj Close':'SPY'})

在循环中,我们也要加入
df_temp=df_temp.rename(columns={'Adj Close':symbol})

完整的代码,如下所示

import pandas as pd
def test_run():
    start_date = '2013-01-01'
    end_date = '2013-01-07'
    dates = pd.date_range(start_date,end_date)
    df1 = pd.DataFrame(index = dates)
    #print df1
    dfSPY = pd.read_csv("data/SPY.csv",index_col='Date',parse_dates = True,
                        usecols=['Date','Adj Close'],na_values=['nan'])
    #print dfSPY
    dfSPY = dfSPY.rename(columns={'Adj Close':'SPY'})
    df1 = df1.join(dfSPY,how = "inner")
    
    
    symbols = ['GOOG','IBM','GLD']
    for symbol in symbols:
        df_temp = pd.read_csv("data/{}.csv".format(symbol),index_col = 'Date',
                              parse_dates=True,usecols=['Date','Adj Close'],
                              na_values = ['nan'])
        df_temp=df_temp.rename(columns={'Adj Close':symbol})
        df1 = df1.join(df_temp)
    
    
    print df1

if __name__ == '__main__':
    test_run()
运行结果

这样的结果相当完美。

你可能感兴趣的:(09多只股票合在一起)