2016-09-28 48 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」的格式,我這樣做:

​​
相關問題