熊猫适合加入120个大型txt文件吗?

问题描述

我有120个txt文件,所有文件的大小都在150mb左右,并且有数千列。总体上肯定有超过一百万列。 当我尝试使用熊猫进行连接时,出现以下错误:“无法为具有形状(57,83626)和数据类型对象的数组分配36.4 MiB” ...我尝试了Jupyter notebook和Spyder,均无效

如何加入数据?还是这些数据不适用于熊猫。

谢谢!

解决方法

您的内存不足。即使您设法全部加载(使用熊猫或其他软件包),对于要使用此数据执行的每个任务,系统仍然会用尽内存。

假设您要在所有表的不同列中执行不同的操作,最好的方法是分别执行每个任务,最好对列进行批处理,因为每个文件的存储量超过1k,如您所说。

假设您要对每个文件的第一列中的值求和(假设它们是数字...)并将这些结果存储在列表中:

import glob
import pandas as pd
import numpy as np

filelist = glob.glob('*.txt') # Make sure you're working in the directory containing the files

sum_first_columns = []

for file in filelist:
    df = pd.read_csv(file,sep=' ') # Adjust the separator for your case
    sum_temp = np.sum(df.iloc[:,0])
    sum_first_columns.append(sum_temp)

您现在有了一个维度列表(1,120)。

对于每项操作,如果我必须使用自己的计算机/系统,这就是我要做的事情。

请注意,鉴于文件的大小,此过程也将非常耗时。您可以尝试reduce your data或使用云服务器来计算所有内容。

,

说要合并熊猫意味着只想将全部150个文件合并到一个文件中?如果是这样,您可以遍历目录中的所有文件,并将它们读为元组或类似内容的列表,然后将它们全部合并为一个列表。列表和元组的内存要比数据帧小得多,但是除非将它们作为numpy数组或数据帧放入,否则您将无法执行计算和填充。

在某个时刻,当数据过多时,从大熊猫转移到spark是适当的,因为spark可以使用群集的电源和内存,而不仅限于本地计算机或服务器资源。