我有一个python字典,包含几个股票,股票指数,固定收益工具和货币(AAPL,AORD等)的CLOSE价格,使用DATE指数。字典中的不同DF具有不同的长度,即一些时间序列比其他时间序列长。所有DF都具有相同的字段,即。 '关闭'。
字典的长度是可变的。如何通过DATE索引将所有DF合并为单个DF,还使用lsuffix =部分名称和我正在阅读的文件的特征? (例如,AAPL_CLOSE.csv文件有一个DATE& a CLOSE字段,但要区别于合并DF中的另一个'CLOSE',其名称应为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)
这是我想要概括的小函数,使用lsuffix = assets_list中的元素,通过DATE创建字典中所有DF的大合并。
merged = asset_dict['AAPL'].join(asset_dict['AORD'], how = 'right', lsuffix ='_AAPL')
由于长度不匹配,DF会有很多N / A,但我会在稍后处理。
答案 0 :(得分: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)
通过指定轴和其他参数,Pandas可以{+ 3}}多个dfs(同时,不是一个一个)包含在词典中,“开箱即用”,不需要太多调整。
df = pd.concat(asset_dict, axis = 1)
得到的df是一个多索引df,这对我来说是一个问题。此外,股票价格的时间序列都有不同的长度,这会产生大量的NaN。我解决了机器人问题:
df.columns = df.columns.droplevel(1)
df.dropna(inplace = True)
现在,我的df的列是这些:
['AAPL', 'AORD', 'EURODOLLAR1MONTH', 'NGETF', 'USDBRL']
但是因为我希望它们包含'STOCK_CLOSE'格式,所以我这样做:
old_columns = df.columns.tolist()
new_columns = []
for name in old_columns:
new_name = name + '_CLOSE_'
new_columns.append(new_name)