2015-04-20 42 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错误:捕获缓冲区溢出 - 可能格式错误的输入文件 –