首页 > 解决方案 > 加入两个大文件而不用熊猫分块

问题描述

我有带有“id,name”的 File1 和带有“id,address”的 File2。我无法加载第一个文件(小于 2Gb):它在 76k 行(带有块 concat)并且只有 2 列之后崩溃......我也无法在第二个文件上 read_csv,因为它在加载一些行后崩溃了内核。

我需要使用“id”加入 File1 和 File2 但如果我不能将文件放入数据框变量中,我不知道该怎么做......

该文件只有 5Gb,有 30M 行,但加载几秒钟后内核就会崩溃。

请问如何在没有数据帧的情况下加入文件?

我试过用夹头,但它崩溃了。

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)

如果可能,我需要加载数据框以加入它们或加入文件而不加载

标签: pythonpandasjoinchunks

解决方案


您逐块读取 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')

推荐阅读