在 python 中按列连接两个大文件

Join two large files by column in python

我有 2 个文件,每个文件有 38374732 行,每个文件大小为 3.3 G。我想加入他们的第一列。为此,我决定将 pandas 与从 Whosebug 中提取的以下代码一起使用:

 import pandas as pd
 import sys
 a = pd.read_csv(sys.argv[1],sep='\t',encoding="utf-8-sig")
 b = pd.read_csv(sys.argv[2],sep='\t',encoding="utf-8-sig")
 chunksize = 10 ** 6
 for chunk in a(chunksize=chunksize):
   merged = chunk.merge(b, on='Bin_ID')
   merged.to_csv("output.csv", index=False,sep='\t')

但是我遇到了内存错误(不足为奇)。我查看了带有 pandas 块的代码(类似于 How to read a 6 GB csv file with pandas),但是我如何在一个循环中为两个文件实现它,我认为我不能将第二个文件分块为我需要在整个秒中查找列 file.Is 有解决办法吗?

这已在其他帖子中讨论过,例如您提到的帖子 (this, or this, or this)。

正如那里所解释的那样,我会尝试使用 dask dataframe 加载数据并执行合并,但根据您的 PC,您可能仍然无法执行此操作。

最小工作示例:

import dask.dataframe as dd

# Read the CSVs
df1 = dd.read_csv('data1.csv')
df2 = dd.read_csv('data2.csv')

# Merge them
df = dd.merge(df1, df2, on='Bin_ID').compute()

# Save the merged dataframe
df.to_csv('merged.csv', index=False)