2015-04-20 37 views
2

我在一個文件夾中有5個csv文件,在這裏我想將每個csv文件中的所有列合併到一個數據框中。當我只加入2個csv文件時,效果很好,但是當我想加入5個csv文件時,我遇到了一個錯誤。我的代碼如下如下:使用熊貓在一個文件夾中加入多個csv文件[MemoryError:]

In [7]: 

import pandas 
import os 
import numpy as np 
import glob 

path =r'D:/PreprocessingITRC/output/All/' 
allFiles = glob.glob(path + "/*.csv") 
dataframe = pandas.DataFrame() 
for file in allFiles: 
    df = pandas.read_csv(os.path.join(file),index_col=0, header=0) 
    dataframe = dataframe.join(df, how='right') 

dataframe 
--------------------------------------------------------------------------- 
MemoryError        Traceback (most recent call last) 
+1

錯誤似乎很明顯,文件有多大? –

+0

你能解釋一下這5個dfs之間的關係嗎?它們是行式還是列式大型數據示例的一部分?在這種情況下,它可能工作,如果你只是一個列表添加每個df到這個列表,然後調用'pd.concat(df_list)' – EdChum

+0

@PadraicCunningham總大小隻有9 KB –

回答

1

您的CSV文件了,所有的值分別爲0的unamed指數,在合併時,這會導致重複的匹配指數激增,因爲它是尋找匹配的每個組合:

藍牙.csv:將

,Bluetooth 
0,9.0 
0,21.0 
0,14.0 

GPS.cav:

,place,distance 
0,3.0,15362.9633071 
0,3.0,15813.7281014 
0,1.0,15360.0862917 

正如你在你的代碼中指定的那樣,這個列應該被當作索引處理,你的合併就會變成iffy。

我指定這列不是索引,以便它爲你創建一個新問題:

pandas.read_csv(os.path.join(file),index_col=None, header=0 

編輯

也看着你在做什麼,我想你不需要合併,只需concat dfs列表:

path =r'D:/PreprocessingITRC/output/All/' 
allFiles = glob.glob(path + "/*.csv") 
dataframes = [] 
for file in allFiles: 
    df = pandas.read_csv(os.path.join(file), index_col=None, header=0) 
    df.drop('Unnamed: 0', axis=1, inplace=True) 
    dataframes.append(df) 
merged = pd.concat(dataframes, axis=1) 
+0

我已經嘗試過使用這種技術來合併最後一個csv大約10+每個大於10mb的大小,我是出現此錯誤'pandas.io.common.CParserError:標記數據出錯。 C錯誤:捕獲緩衝區溢出 - 可能格式錯誤的輸入文件 –