2017-07-02 31 views
-4

我確信我缺少一些明顯的東西。連接的工作原理是「打印d」正好打印出我想要的內容,但出於某種原因,它不會粘在for循環之外。如果我要求在循環外打印一個數據框,它們都是空的數據框。請幫忙。for循環中導致空數據框的Pandas數據框串接

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.20.0(https://pandas.pydata.org/pandas-docs/stable/dsintro.html#panel) – woodpav

+1

OP,您應該使用不是這樣的字典。我不知道發生了什麼,字典會更簡單。 'file_name:pd.DataFrame' – woodpav

+0

@tywoodpav Awww,就在我準備使用它們的時候。謝謝,我不知道。所以...他們會重命名熊貓嗎? ;)(刪除我之前的評論) –

回答

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()。非常方便的技巧,你應該儘可能使用。

+0

謝謝。這工作。他們是csv文件的文件夾,我試圖附加到每個文件夾的單獨數據框。 – rookEqueen

+0

標記爲正確答案pls :) – woodpav

相關問題