Python 合并大数据帧和小数据帧(大数据帧作为缓冲区提供)

Python 合并大数据帧和小数据帧(大数据帧作为缓冲区提供),python,python-3.x,pandas,dask,Python,Python 3.x,Pandas,Dask,我是熊猫队的新手,我希望能得到你们的帮助 我有两个文件,其中一个非常大(100G+),我需要根据一些列合并。我跳过了大文件中的一些行,因此我将文件作为read_csv方法的缓冲区 首先,我试着用熊猫。然而,当我尝试使用pandas打开文件时,该进程被操作系统终止 with open(self.all_file, 'r') as f: line = f.readline() while line.startswith('##'): pos = f.tell()

我是熊猫队的新手,我希望能得到你们的帮助

我有两个文件,其中一个非常大(100G+),我需要根据一些列合并。我跳过了大文件中的一些行,因此我将文件作为read_csv方法的缓冲区

首先,我试着用熊猫。然而,当我尝试使用pandas打开文件时,该进程被操作系统终止

with open(self.all_file, 'r') as f:
    line = f.readline()
    while line.startswith('##'):
          pos = f.tell()
          line = f.readline()
    f.seek(pos)
    return pd.read_csv(f,sep='\t')
后来,我尝试使用dask代替pandas,但是dask无法获得一个缓冲区作为read_csv方法的输入,所以失败了

    return dd.read_csv(f,sep='\t')
如何打开大文件作为缓冲区并合并两个数据帧

谢谢大家!

IIUC:

  • 您知道要跳过的行号
  • 由于这些是VCF头行,因此这些行仅出现在文件的开头
因此,您仍然可以使用
dd.read\u csv
,因为可以从
skiprows

  • 有关
    skiprows的
    pandas
    示例,请参见
    • 如果
      skiprows
      是一个整数(例如2),那么
      .read\u csv
      将跳过2行
    • 如果
      skiprows
      是整数列表(例如[2,3]),则
      .read\u csv
      将跳过行号(在
      .csv
      文件中),从行号0开始
因此,您可以使用
dask

df_1 = dd.read_csv('file_1.csv', skiprows=2, sep='\t') # skip line numbers 1, 2
df_2 = dd.read_csv('file_2.csv', skiprows=[10, 16]) # skip line numbers 11, 17
然后将2个
数据帧
s与
dask


如果这是您所要求的,那么您不需要使用缓冲区。

使用dask执行合并非常简单。例如,演示了如何执行此操作。为什么必须提供大数据帧作为缓冲区?这是要求吗?或者,您可以直接使用dask
.read_csv
读取文件吗?您可以提供每个文件的示例(前5行)吗?@edesz我提供它作为缓冲区,因为我跳过了几行(vcf头行)
df_merged = dd.merge(df_1, df_2, left_on='abcd', right_on='abcde')