Python 在块中合并巨大的数据帧
我正在尝试合并两个巨大的数据帧。Python 在块中合并巨大的数据帧,python,pandas,merge,Python,Pandas,Merge,我正在尝试合并两个巨大的数据帧。 两个数据帧的格式如下(示例): 我只想在两列上实现合并(相交而不是并集) 但是在这种情况下,它比仅仅用pandasmerge合并两个文件要复杂得多 由于这两个文件都可能很大(超过100GB),因此我按以下方式将它们分块读取: pileup_df = pd.read_csv(pileup, '\t', header=None, chunksize=size) lists_df = pd.read_csv(sorted_lists, '\t', header=Non
两个数据帧的格式如下(示例): 我只想在两列上实现合并(相交而不是并集) 但是在这种情况下,它比仅仅用pandas
merge
合并两个文件要复杂得多 由于这两个文件都可能很大(超过100GB),因此我按以下方式将它们分块读取:
pileup_df = pd.read_csv(pileup, '\t', header=None, chunksize=size)
lists_df = pd.read_csv(sorted_lists, '\t', header=None, chunksize=size)
for iter, (pileup_chunk, lists_chunk) in enumerate(zip(pileup_df, lists_df)):
intersection = pd.merge(pileup_chunk, lists_chunk, on=[0, 1])
intersection.columns = [i for i in range(len(intersection.columns))]
if iter == 0:
intersection.to_csv(output, header=None, index=None, sep='\t')
else:
intersection.to_csv(output, mode='a', header=None, index=None, sep='\t')
del intersection
为了解释我的问题,我将举一个例子如果一个文件的内容是:
chr5 1
chr1 250164
chr1 250169
chr1 11467
chr1 250199
第二个文件的内容是:
chr5 1
chrx 2
chrx 3
chr1 250164
那么我想要得到的输出是
chr1 250164
chr5 1
但例如,如果我选择chunksize=2
,那么输出将是
chr5 1
记住,对文件进行排序也不能解决这个问题。
有没有办法解决这个问题
关于内存问题——我也尝试过使用dask,但我仍然需要多个块来读取这些文件,而不会出现内存错误。dask不支持核心外连接吗?@anon01我没有深入研究dask,只是尝试读取数据帧并执行合并。无论哪种方式,它都在读取文件时失败。您能详细说明什么是核心连接以及它如何帮助解决这个问题吗?dask的主要功能之一是能够直接从磁盘操作数据帧,而不是将数据帧读入磁盘memory@anon01从文件读取时,此功能是默认的吗?或者我应该指定一些参数或使用特定函数?我记得我尝试使用匹配函数从pandas中读取csv,但失败了,因为dask不支持核心外连接吗?@anon01我没有深入研究dask-只是尝试读取数据帧并执行合并。无论哪种方式,它都在读取文件时失败。您能详细说明什么是核心连接以及它如何帮助解决这个问题吗?dask的主要功能之一是能够直接从磁盘操作数据帧,而不是将数据帧读入磁盘memory@anon01从文件读取时,此功能是默认的吗?或者我应该指定一些参数或使用特定函数?我记得我试着只使用匹配函数从pandas中读取csv,但由于
MemoryError
chr5 1