Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在块中合并巨大的数据帧_Python_Pandas_Merge - Fatal编程技术网

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