2017-03-01 73 views
1

我想從幾個.csv文件中提取數據並將它們組合成一個大的數據框在pandas中。爲此,我創建了一個數據框,該數據框應填入傳入數據dataframes。Python:熊貓數據框 - 數據覆蓋而不是串聯的

final_df = DataFrame(columns=['Column1','Column2','Column3']) 

for file in glob.glob("file.csv"): 
    name_csv = str(file) 
    logfile = pd.read_csv(name_csv, skip_blank_lines = False) 
    df = DataFrame(logFile, columns=['Column1','Column2','Column3'] 
    concat = pd.concat([final_df,df]) 

但是,通過循環的每次迭代,先前提取的數據都會被覆蓋。我怎麼解決這個問題?

回答

1

您需要首先append所有dflist,然後使用concat

也有一些改進,read_csv - logfile已經是東風,更好的是使用參數names

dfs = [] 
for file in glob.glob("*.csv"): 
    logfile = pd.read_csv(str(file), 
          skip_blank_lines = False, 
          names = ['Column1','Column2','Column3']) 
    dfs.append(logfile) 

concat = pd.concat(dfs) 

或者使用list comprehension

dfs = [pd.read_csv(str(file), 
     skip_blank_lines = False, 
     names = ['Column1','Column2','Column3']) for file in glob.glob("*.csv")] 

concat = pd.concat(dfs) 
+0

看起來像括號是錯在你的列表理解。 – languitar

+0

@languitar - 謝謝,糾正。 – jezrael

2

您未使用的pd.concat結果都沒有。變量concat僅在每次迭代中丟棄,但它將是部分數據幀。

1

您應該創建DF的名單和Concat的這一切在最後:

concat_list = [] 
for file in glob.glob("file.csv"): 
    name_csv = str(file) 
    logfile = pd.read_csv(name_csv, skip_blank_lines = False) 
    df = DataFrame(logFile, columns=['Column1','Column2','Column3'] 
    concat_list.appned(df) 
final_df = pd.concat(concat_list) 
+0

在這種情況下,沒有理由保留'final_df'的第一個實例。它只是最終被取代。 – languitar

+0

@languitar,忘記刪除它,謝謝:) –