我有带有“ id,name”的File1和带有“ id,address”的File2。我无法加载第一个文件(小于2Gb):它在76k行(带有大块concat)并且只有2列后崩溃……我也无法在第二个文件上读取read_csv,因为它在加载某些行后使内核崩溃。
我需要用“ id”将File1和File2连接起来,但是如果我不能将文件放在dataframe变量中,我不知道该怎么做...
该文件只有5Gb,具有3000万行,但是在加载几秒钟后就会使内核崩溃。
请问如何在没有数据框架的情况下加入文件?
我尝试过卡盘,但是会崩溃。
chunks = []
cols = [...]
for chunk in pd.read_csv("file2.csv", chunksize=500000, sep=',', error_bad_lines=False, low_memory=False, usecols=cols):
chunks.append(chunk)
df = pd.concat(chunks, axis=0)
print(f.shape)
如果可能,我需要加载数据框以加入它们或加入文件而不加载
答案 0 :(得分:2)
您逐块读取df2块,但是由于您附加了所有块,因此生成的块与file2的大小相同。
如果能够完全加载df1,您可以做的就是像这样逐个加入df2块:
for chunk in pd.read_csv("file2.csv", chunksize=500000, sep=',', error_bad_lines=False, low_memory=False, usecols=cols):
df1.merge(chunk, on =['id'], how='left')
答案 1 :(得分:0)
那样的压缩肯定仍会使您的内核崩溃,因为您仍在尝试将所有内容装入内存。您需要对块进行一些操作以减小其大小。
例如,您可以成块读取两个文件,将每个块连接在一起,将匹配项输出到另一个文件,然后将不匹配的ID保留在内存中。如果不幸,那仍然可能使内核崩溃。这取决于您的性能约束,以及之后需要处理的数据。