我有很多由[factor]和[date]标记的CSV文件。每个文件包含不同[符号]的[曝光]。我非常想要的是每天,数据帧包含[符号]和它们的[因子]。这是我尝试过的。
for d in tradedays:
for f in factor_list:
file_name='/home/jovyan/multifactor_data/'+str(f)+'/'+str(d)+'.csv'
if os.path.exists(file_name) and 20160929<=int(d)<=20160930:
origin_df=pd.read_csv(file_name)
origin_df=origin_df.loc[:,['symbol','indusMkt1']]
df_list.append(origin_df)
else:
pass
对于此示例,df_list中有12个不同的数据帧。 我知道我可以合并当天的数据框
M_list=df_list[0]
for i in [1,2,3,4,5]:
M_list=M_list.merge(df_list[i],on='symbol')
但我怎么能把它放在循环中呢? python新手。欢迎提出任何建议。
答案 0 :(得分:0)
考虑在每个循环中重置df_list
并使用reduce(lambda ...)
合并列表中的所有数据框。并考虑使用tradedays
作为键的字典来避免全球环境中的许多日常数据帧:
from functools import reduce
import pandas as pd
import os
dfs = {} # MERGED DFs DICT
for d in tradedays:
df_list = [] # RESET DF LIST BY DAY
for f in factor_list:
file_name = os.path.join('/home/jovyan/multifactor_data',str(f),str(d)+'.csv')
if os.path.exists(file_name) and 20160929 <= int(d) <= 20160930:
df_list.append(pd.read_csv(file_name)[['symbol','indusMkt1']])
dfs[d] = reduce(lambda left,right: pd.merge(left, right, on=['symbol']), df_list)