把两个大文件连在一起,不要用Pandas块

2024-04-18 06:37:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有“id,name”的文件1和“id,address”的文件2。我无法加载第一个文件(小于2Gb):它在76k行(使用chunk concat)和2列之后崩溃。。。我也无法读取第二个文件的\u csv,因为它在加载一些行后会使内核崩溃。你知道吗

我需要用“id”连接File1和File2,但是如果我不能将文件放入dataframe变量中,我不知道怎么做。。。你知道吗

该文件只有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)

我需要数据帧加载加入他们或加入文件而不加载,如果可能的话


Tags: 文件csv数据nameidfalseaddress内核
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')

这样的分块肯定仍然会使内核崩溃,因为您仍在尝试将所有内容放入内存。你需要对你的大块做些什么来缩小它们的尺寸。你知道吗

例如,您可以分块读取两个文件,连接每个块,将匹配项输出到另一个文件,并将不匹配的id保存在内存中。如果你运气不好的话,这可能会使你的内核崩溃。这取决于您的性能约束是什么,以及以后需要对数据做什么。你知道吗

相关问题 更多 >