使用pandas [MemoryError:]将多个csv文件连接到一个文件夹中

时间:2015-04-20 10:13:00

标签: python pandas

我在一个文件夹中有5个csv文件,在这里我想将每个csv文件中的所有列连接到一个数据帧中。当我只加入2个csv文件时,它运行良好,但是当我想加入5个csv文件时,我遇到了一个错误。我的代码如下:

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 :(得分:1)

你的csv文件有一个unamed索引,其中所有的值都是0,当合并这个时会导致重复匹配以指数方式爆炸,因为它找到了每个匹配组合:

bluetooth.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)