Python-在两个表中合并数据

Python-在两个表中合并数据,python,python-3.x,file-io,Python,Python 3.x,File Io,我想用python(python 3.4)合并表中的数据。 我的示例数据如下所示,我希望得到这种结果表 [表1] Name1 Name2 AAAA XXXX BBBB YYYY CCCC ZZZZ Index1 Sample1 Sample2 Sample3 AAAA 10 20 30 BBBB 25 25 25 CCCC 30 31 32 XXXX 27 29 31 YYYY 45 21 56 ZZZZ 48 24 10 Index2 Sample1 Sample2 Sample3 AAA

我想用python(python 3.4)合并表中的数据。 我的示例数据如下所示,我希望得到这种结果表

[表1]

Name1 Name2
AAAA XXXX
BBBB YYYY
CCCC ZZZZ
Index1 Sample1 Sample2 Sample3
AAAA 10 20 30
BBBB 25 25 25
CCCC 30 31 32
XXXX 27 29 31
YYYY 45 21 56
ZZZZ 48 24 10
Index2 Sample1 Sample2 Sample3
AAAA+XXXX 37 49 61
BBBB+YYYY 70 46 81
CCCC+ZZZZ 78 55 42
[表2]

Name1 Name2
AAAA XXXX
BBBB YYYY
CCCC ZZZZ
Index1 Sample1 Sample2 Sample3
AAAA 10 20 30
BBBB 25 25 25
CCCC 30 31 32
XXXX 27 29 31
YYYY 45 21 56
ZZZZ 48 24 10
Index2 Sample1 Sample2 Sample3
AAAA+XXXX 37 49 61
BBBB+YYYY 70 46 81
CCCC+ZZZZ 78 55 42
[结果表]

Name1 Name2
AAAA XXXX
BBBB YYYY
CCCC ZZZZ
Index1 Sample1 Sample2 Sample3
AAAA 10 20 30
BBBB 25 25 25
CCCC 30 31 32
XXXX 27 29 31
YYYY 45 21 56
ZZZZ 48 24 10
Index2 Sample1 Sample2 Sample3
AAAA+XXXX 37 49 61
BBBB+YYYY 70 46 81
CCCC+ZZZZ 78 55 42
虽然这似乎是一个简单的问题,但我找不到好的解决方案,因为我是python新手,对python库不熟悉。如果我在DB上使用SQL,这可能很容易,但我想在没有DB的情况下解决它。
有人有好主意吗?

如果您使用纯python(没有第三方库,如numpy),可以这样做:

class Entry:
    def __init__(self, index, sample1, sample2, sample3):
        self.index = index
        self.sample1 = sample1
        self.sample2 = sample2
        self.sample3 = sample3

    def __add__(self, other):
        return '{index2} {sample1} {sample2} {sample3}'.format(
            index2=self.index + '+' + other.index,
            sample1=self.sample1 + other.sample1,
            sample2=self.sample2 + other.sample2,
            sample3=self.sample3 + other.sample3,
        )


def read_table(path_to_data):
    def extract_body(content):
        return [e.strip().split(' ') for e in content[1:]]

    with open(path_to_data, 'r') as f:
        content = f.readlines()
    return extract_body(content)


content1 = read_table('data1.txt')
content2 = read_table('data2.txt')

entries = [Entry(e[0], int(e[1]), int(e[2]), int(e[3])) for e in content2]

# output
print('Index2 Sample1 Sample2 Sample3')

for line in content1:
    entry1 = next(e for e in entries if e.index == line[0])
    entry2 = next(e for e in entries if e.index == line[1])

    print(entry1 + entry2)

以下
csv
方法适用于您的示例数据:

import csv

with open('table2.txt', 'r') as f_table2:
    csv_table2 = csv.reader(f_table2, delimiter=' ', skipinitialspace=True)
    table2_header = next(csv_table2)
    table2_data = {cols[0] : cols[1:] for cols in csv_table2}

with open('table1.txt', 'r') as f_table1, open('output.csv', 'w', newline='\n') as f_output:
    csv_table1 = csv.reader(f_table1, delimiter=' ', skipinitialspace=True)
    table1_header = next(csv_table1)
    csv_output = csv.writer(f_output)
    csv_output.writerow(table2_header)

    csv_output.writerows(
        ['{}+{}'.format(cols[0], cols[1])] + [int(x) + int(y) for x, y in zip(table2_data[cols[0]], table2_data[cols[1]])] for cols in csv_table1)
这将为您提供一个输出CSV文件,如下所示:

Index1,Sample1,Sample2,Sample3
AAAA+XXXX,37,49,61
BBBB+YYYY,70,46,81
CCCC+ZZZZ,78,55,42

使用Python 3.4.3进行测试,我建议首先将“表2”读入关系数据类型,如Python字典。这样就有了键值对。然后,您可以解析“表1”文件,查看要将哪些值添加到一起。特别是关于.如何存储表中的数据的部分?在一个
.txt
文件中?如果你想用1GB大小的表做这些事情,听起来你肯定想用Pandas。@特别是表1有多大?您不能避免将它们存储在内存中,否则运行时将变得疯狂。如果表1相当小,您仍然可以在1中巧妙地运行表2。如果不是,您将需要使用一个框架来处理此类数据(例如熊猫),或者使用sqlite.csv模块来处理txt文件似乎也非常有用。您的代码与我的示例配合得很好。我想用更大的数据集测试csv方法和熊猫方法。谢谢您的帮助。因为我是python的新手,所以我希望尽可能多地利用现成的库。然而,我感到惊讶的是,您在没有数据处理库的情况下使用纯python完成了这项工作,并了解了一点如何处理这类工作。谢谢你的帮助。