for循环中的Pandas数据帧连接导致空数据帧

时间:2017-07-02 23:34:36

标签: python pandas

我确信我错过了一些明显的东西。串联起作用是因为" print d"打印完全符合我的要求,但由于某种原因,它不会超出for循环。如果我要求在循环外打印一个数据帧,它们都是空的数据帧。请帮忙。

file_name = ['anal_cc_cbs/ld-non_aug-atqd', 'anal_cc_cbs/ld-non_aug-tqt', 'anal_cc_cbs/ld-non_aug-q5t', 
        'anal_cc_cbs/ld-atqd', 'anal_cc_cbs/ld-tqt', 'anal_cc_cbs/ld-q5t', 'anal_fnocc_cbs/ld-non-aug-atqd', 
        'anal_fnocc_cbs/ld-non-aug-tqt', 'anal_fnocc_cbs/ld-non-aug-q5t', 'anal_fnocc_cbs/ld-atqd', 
        'anal_fnocc_cbs/ld-tqt', 'anal_fnocc_cbs/ld-q5t', 'anal_fnocc_cbs/ld-56t', 'vdz_rad', 'vtz_rad', 'vqz_rad',
        'v5z_rad', 'avdz_rad', 'avtz_rad', 'avqz_rad', 'av5z_rad', 'vdz-f12_rad', 'vtz-f12_rad', 'tzvpp_rad',
        'qzvpp_rad']

o_tqd_df=pd.DataFrame(); o_tqt_df=pd.DataFrame(); o_q5t_df=pd.DataFrame(); 
o_atqd_df=pd.DataFrame(); 
o_atqt_df=pd.DataFrame(); o_aq5t_df=pd.DataFrame(); o_ftqd_df=pd.DataFrame(); 
o_ftqt_df=pd.DataFrame(); 
o_fq5t_df=pd.DataFrame(); o_fatqd_df=pd.DataFrame(); 
o_fatqt_df=pd.DataFrame(); o_faq5t_df=pd.DataFrame(); 
o_fa56t_df=pd.DataFrame(); o_vdz_df=pd.DataFrame(); o_vtz_df=pd.DataFrame(); 
o_vqz_df=pd.DataFrame(); 
o_v5z_df=pd.DataFrame(); o_avdz_df=pd.DataFrame(); o_avtz_df=pd.DataFrame(); 
o_avqz_df=pd.DataFrame();
o_av5z_df=pd.DataFrame(); o_vdz_f12_df=pd.DataFrame(); 
o_vtz_f12_df=pd.DataFrame(); o_tzvpp_df=pd.DataFrame(); 
o_qzvpp_df=pd.DataFrame() 

df_name = [o_tqd_df, o_tqt_df, o_q5t_df, o_atqd_df, o_atqt_df, o_aq5t_df, 
o_ftqd_df, o_ftqt_df, o_fq5t_df, o_fatqd_df,
      o_fatqt_df, o_faq5t_df, o_fa56t_df, o_vdz_df, o_vtz_df, o_vqz_df, 
o_v5z_df, o_avdz_df, o_avtz_df, o_avqz_df,
      o_av5z_df, o_vdz_f12_df, o_vtz_f12_df, o_tzvpp_df, o_qzvpp_df]

for f, d in zip(file_name, df_name):
    allFiles = glob.glob('/theoryfs2/ds/warden/projects/fp_opt/' + f + '/ld-*')
    dlist = []
    for fil in allFiles:
        df = pd.read_csv(fil)
        dlist.append(df)
    d = pd.concat(dlist)
    print d

1 个答案:

答案 0 :(得分:0)

from collections import defaultdict    

dfs = defaultdict(pd.DataFrame)

for filename in filenames:
    with open(filename) as list_of_csvs:
        for csv_file in list_of_csvs:
            dfs[filename].append(pd.read_csv(csv_file))

我不知道那些文件是什么。我假设它们是带有csv文件行的文本文件。

此代码创建数据框字典,其中每个数据框都包含文件中列出的CSV文件的累计内容。

编辑:值得一提的是defaultdict创建了一个词典,但你不必做if key not in d: d[key] = pd.DataFrame()。你应该尽可能使用非常方便的技巧。