我有120个txt文件,大小都在150mb左右,有数千列。总的来说,肯定有超过100万个专栏。当我尝试使用panda连接时,我会得到以下错误:";无法为具有形状(5783626(和数据类型对象"的数组分配36.4 MiB;。。。我试过Jupyter笔记本和Spyder,都不适用
如何连接数据?或者这个数据不适合熊猫。
谢谢!
内存不足。即使您设法加载了所有这些数据(使用panda或其他包(,您的系统仍然会为您想要使用这些数据执行的每个任务耗尽内存。
假设您想在所有表的不同列中执行不同的操作,那么最好的方法是分别执行每个任务,最好是批量处理列,因为正如您所说,每个文件的列数超过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)
您现在有一个维度(1120(的列表。
对于每个操作,如果强制要求我使用自己的计算机/系统,我会这样做。
请注意,考虑到文件的大小,这个过程也会非常耗时。您可以尝试减少数据,也可以使用云服务器计算所有内容。
说您想在pandas中concat意味着您只想将所有150个文件合并到一个文件中?如果是这样的话,你可以遍历一个目录中的所有文件,并将它们作为元组列表或类似的东西读取,然后将它们全部组合到一个列表中。列表和元组的内存比数据帧小很多,但除非将它们作为numpy数组或数据帧放入,否则您将无法执行计算和其他操作。
在某一点上,当数据太多时,从panda转移到spark是合适的,因为spark可以使用集群中的电源和内存,而不是局限于您的本地机器或服务器资源。