【发布时间】:2021-05-11 13:24:53
【问题描述】:
我有两个文件(示例:A.txt 和 B.txt),其中“A.txt”非常大。我想避免将完整文件读入内存,并在合并来自“B.txt”的匹配之前逐行读取。这两个文件也都有标题。
我当前的代码如下所示:
import os
import pandas as pd
contigs=pd.read_csv("A.txt", header=0, sep="\t")
coverages=pd.read_csv("B.txt", header=0, sep="\t")
merged=pd.merge(contigs, coverages, on='contig')
merged.to_csv("merged_file.txt", sep="\t", index=False)
代码有效,但如上所述,我想逐行读取“A.txt”,而不是完全读取内存,并在写出之前与“B.txt”合并。
非常感谢您的帮助!
(使用示例文件更新原始帖子)
head A.txt
clusterID kegg_contig contig
Cluster_10700 Unassigned_ERR1801630_792963 ERR1801630_contig_792963
Cluster_10700 Unassigned_ERR1801633_537686 ERR1801633_contig_537686
Cluster_10700 Unassigned_ERR505054_53474 ERR505054_contig_53474
Cluster_10700 Unassigned_ERR505054_31574 ERR505054_contig_31574
head B.txt
contig coverage
ERR1726751_contig_1 28.82716
ERR1726751_contig_2 12.265934
ERR1726751_contig_3 17.733767
【问题讨论】:
-
查看块合并 stackoverflow.com/questions/58441517/… file = "tableFile/123456.txt" initDF = pd.read_csv(file, sep="\t", header=0) file2 = "tableFile/7891011.txt " 对于 pd.read_csv(file2, sep="\t", chunksize=50000, header=0) 中的块:initDF = initDF.merge(chunks, how='right', on=['Mod', "Nuc" , "AA"])
-
感谢@GoldenLion。我试过这个,但不管它在最后打印一个
empty数据框。 -
你能发一个a和b数据框的样本,我会用数据测试代码
-
谢谢@GoldenLion。两个文件的前几行都贴在原文中
-
在数据样本中,contig 字段没有匹配项