熊猫:如何合并已分块读取的列表[MemoryError]

时间:2019-05-15 05:30:44

标签: python pandas

所以基本上我想解释一下我在做什么:我要处理大量的列和条目(218列,每列30万行)-我想将它们全部存储到一个熊猫数据框。因为我需要事先做一些额外的操作,并试图在写,编码值等过程中事前避免内存错误,所以我最终将每个dataframe列作为一个csv文件写入一个文件夹,然后一次打开所有文件并将其读入单个csv文件。但是,使用以下代码读取单个csv:

with ExitStack() as stack, open(path_to_all_data_csv, "w+", newline='', errors='surrogateescape') as to_file:
    # open all files
    fs = [stack.enter_context(open(fname, errors='surrogateescape')) for fname in files]
    fs = map(csv.reader, fs)
    # write all rows from all files
    csv.writer(to_file).writerows(zip(*fs))

将这种结果留给我,例如(假设每一列都采用这种格式):

['category_0']
['0.0']
['0.0']
['0.0']
...

要删除方括号和单引号,我使用了我在堆栈溢出中也发现的这段代码(如前所述)(称为“ REPLACE FUNCTION”):

f1 = open(path_to_all_data_csv, 'r')
f2 = open(path_to_all_data_edited_csv, 'w')
for line in f1:
    f2.write(line.replace("['", "").replace("']", ""))
f1.close()
f2.close()

它固定了格式,因此我将拥有以后的操作所需的值。所以最后,我分块读取了较大的CSV文件,并将其存储在列表中,然后使用以下代码将其连接到数据框“ featuresEditedDf”中:

mylist = []

for chunk in  pd.read_csv(path_to_all_data_edited_csv, sep=',', chunksize=2000):
    mylist.append(chunk)

featuresEditedDf = pd.concat(mylist, axis=0)

但是,我遇到了内存错误。奇怪的是-如果我不执行“ REPLACE FUNCTION”,而只是用括号括起来未编辑的值,那么concat不会引发内存错误,但是,如果我确实执行“ REPLACE FUNCTION”然后再concat-它会抛出内存错误。所以我的问题是有没有办法解决?也许可以采用某种不同的方式-可以通过写入或读取方法来摆脱“ REPLACE FUNCTION”,因此不会引发内存错误吗?或者也许有更好的方法来合并我拥有的数据? (我将所有数据作为单独的CSV文件作为列,在单个CSV文件中以及在mylist变量中-但是,它的格式不可用)

0 个答案:

没有答案