2016-09-28 34 views
0

我有一个包含几种股票,股票指数,固定收益工具和货币(AAPL,AORD等)的关闭价格的Python字典,使用DATE索引。词典中的不同DF具有不同的长度,即一些时间序列比其他时间序列长。所有的DF都有相同的字段,即。 '关'。在DATE索引上合并多个pandas dfs时间序列,并将其包含在Python字典中

字典的长度是可变的。我如何通过DATE索引将所有DF合并为一个DF,还可以使用lsuffix =我正在阅读的文件的部分名称和特征? (例如,AAPL_CLOSE.csv文件中有一个日期&一个CLOSE场,但在合并后的DF其他“关闭”来区分,它的名称应该是AAPL_CLOSE)

这是我有:

asset_name = [] 
files_to_test = glob.glob('*_CLOSE*') 
for name in files_to_test: 
    asset_name.append(name.rsplit('_', 1)[0]) 

将返回:

asset_name = ['AAPL', 'AORD', 'EURODOLLAR1MONTH', 'NGETF', 'USDBRL'] 
files_to_test = ['AAPL_CLOSE.csv', 
'AORD_CLOSE.csv', 
'EURODOLLAR1MONTH_CLOSE.csv', 
'NGETF_CLOSE.csv', 
'USDBRL_CLOSE.csv'] 

然后:

asset_dict = {} 
for name, file in zip(asset_name, files_to_test): 
    asset_dict[name] = pd.read_csv(file, index_col = 'DATE', parse_dates = True) 

这是我想概括的小函数,在DATE中通过使用lsuffix = asset_list中的元素创建字典中所有DF的大合并。

merged = asset_dict['AAPL'].join(asset_dict['AORD'], how = 'right', lsuffix ='_AAPL') 

由于长度不匹配,DF会有很多N/A,但我会在稍后处理。

+0

请参阅http://stackoverflow.com/questions/23787072/python-pandas-join-dataframes-on-index – scomes

+0

谢谢。你指出的问题与切线相关;它并没有解决多个dfs在同一时间合并,而是成对的问题。 –

+0

只需将它们合并成一个一个。合并的方式通常是书面的。始终保持一个“主”数据框(首先这只是第一个数据框),然后将其他数据合并到一个数据框中。 – scomes

回答

0

在没有得到任何答案之后,我找到了可行的解决方案,虽然可能会有更好的解决方案。这是我做过什么:

asset_dict = {} 
for name, file in zip(asset_name, files_to_test): 
    asset_dict[name] = pd.read_csv(file, index_col='DATE', parse_dates=True) 
    asset_dict[name].sort_index(ascending = True, inplace = True) 

大熊猫能concatenate multilple DFS(一次,就不一一)包含在词典中,“开箱的”没有太多的调整,通过指定轴等参数。

df = pd.concat(asset_dict, axis = 1) 

由此产生的df是一个多索引df,这对我来说是一个问题。此外,股票价格的时间序列长度各不相同,从而创造出大量的NaN。我解决了BOT的问题是:

df.columns = df.columns.droplevel(1) 
df.dropna(inplace = True) 

现在,我的DF的列有这些:

['AAPL', 'AORD', 'EURODOLLAR1MONTH', 'NGETF', 'USDBRL'] 

但因为我希望他们包含“STOCK_CLOSE”的格式,我这样做:

​​
相关问题