在python中嵌套for循环for for循环中的数据帧

时间:2016-11-13 13:51:20

标签: python

我有很多由[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新手。欢迎提出任何建议。

1 个答案:

答案 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)