Python 合并大数据帧和小数据帧(大数据帧作为缓冲区提供)
我是熊猫队的新手,我希望能得到你们的帮助 我有两个文件,其中一个非常大(100G+),我需要根据一些列合并。我跳过了大文件中的一些行,因此我将文件作为read_csv方法的缓冲区 首先,我试着用熊猫。然而,当我尝试使用pandas打开文件时,该进程被操作系统终止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()
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
- 如果
是一个整数(例如2),那么skiprows
将跳过2行.read\u csv
- 如果
是整数列表(例如[2,3]),则skiprows
将跳过行号(在.read\u csv
文件中),从行号0开始.csv
- 如果
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')