合并Pandas中的数据帧块

2024-10-03 02:46:09 发布

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

我目前有一个脚本,将多个csv文件合并成一个,该脚本工作良好,除了我们运行的内存非常快,当更大的文件开始使用。这是一个问题,原因之一是脚本在AWS服务器上运行,RAM用完意味着服务器崩溃。 目前每个文件的大小限制在250mb左右,这就限制了我们只能有2个文件,但是由于我工作的公司是生物技术公司,我们使用的是基因测序文件,根据实验结果,我们使用的文件大小可以从17mb到700mb左右。我的想法是将一个数据帧整体加载到内存中,然后将其他数据帧分块并进行迭代组合,但效果并不理想。在

我的数据帧与此类似(它们的大小可能不同,但有些列保持不变;“Mod”、“AA”和“Nuc”)

+-----+-----+-----+-----+-----+-----+-----+-----+
| Mod | Nuc | AA  | 1_1 | 1_2 | 1_3 | 1_4 | 1_5 |
+-----+-----+-----+-----+-----+-----+-----+-----+
| 000 | ABC | ABC | 10  | 5   | 9   | 16  | 8   |
+-----+-----+-----+-----+-----+-----+-----+-----+
| 010 | CBA | CBA | 0   | 1   | 4   | 9   | 0   |
+-----+-----+-----+-----+-----+-----+-----+-----+

当合并这两个框架时,我需要他们合并在“Mod”,“Nuc”和“AA”上,这样我就有了类似的东西

^{pr2}$

我已经有代码可以更改头的名称,所以我不担心这一点,但是当我使用块时,我最终得到的结果是更接近

+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| Mod | Nuc | AA  | 1_1 | 1_2 | 1_3 | 1_4 | 1_5 | 2_1 | 2_2 | 2_3 | 3_1 | 3_2 | 3_3 |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| 000 | ABC | ABC | 10  | 5   | 9   | 16  | 8   | 5   | 29  | 0   | NA  | NA  | NA  |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| 010 | CBA | CBA | 0   | 1   | 4   | 9   | 0   | NA  | NA  | NA  | 0   | 0   | 1   |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+

基本上,它将每个块视为一个新文件,而不是来自同一个文件。在

我知道为什么要这样做,但我不确定如何解决这个问题,现在我的分块代码非常简单。在

    file = "tableFile/123456.txt"
    initDF = pd.read_csv(file, sep="\t", header=0)
    file2 = "tableFile/7891011.txt"
    for chunks in pd.read_csv(file2, sep="\t", chunksize=50000, header=0):
        initDF = initDF.merge(chunks, how='right', on=['Mod', "Nuc", "AA"])

正如你所看到的,它非常简陋,正如我所说,我知道它为什么要这样做,但是我没有熊猫和数据帧连接的经验,所以如果有任何帮助,我将不胜感激。我在搜索stack和google时也找不到类似的东西。在


Tags: 文件csv数据内存服务器脚本mod公司