现在我们需要一起处理好几只股票的数据。
我们现在有这样的一个列表:
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()
这样的结果相当完美。