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

2024-04-25 12:26:51 发布

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

我是新来熊猫的,我希望能得到你的帮助。你知道吗

我有两个文件,其中一个非常大(100G+),我需要根据一些列合并。我跳过了大文件中的一些行,因此我将文件作为read\u 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\u csv方法的输入,所以失败了。你知道吗

    return dd.read_csv(f,sep='\t')

如何打开大文件作为缓冲区并合并两个数据帧?你知道吗

谢谢你!你知道吗


Tags: 文件csv方法pospandasreadreadlinereturn
1条回答
网友
1楼 · 发布于 2024-04-25 12:26:51

IIUC公司:

  • 你知道要跳过的行号吗
  • 因为这些是VCF头行,所以这些行只出现在文件的开头

因此,您仍然可以使用dd.read_csv,因为it accepts keywords来自^{},例如skiprows

  • 请参见this SO post以获取pandasskiprows示例
    • 如果skiprows是整数(例如2),那么.read_csv将跳过2行
    • 如果skiprows是整数列表(例如[2,3]),则.read_csv将跳过行号(在.csv文件中),从行号0开始

因此,您可以使用dask将这两个文件读入.csv文件

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 DataFramedask^{}合并

df_merged = dd.merge(df_1, df_2, left_on='abcd', right_on='abcde')

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

相关问题 更多 >