繁体   English   中英

将特定列从csv文件复制到特定位置的另一个csv

[英]Copying a specific column from a csv file to another csv in a specific place

我在该论坛上看到的Python 2.7中尝试了不同的方法,用于将特定列从csv文件复制到特定位置(列)的另一个csv文件。

csv1:
Header1 Header2 Header3 Header4
1       2       3       4
1       2       3       4
1       2       3       4
1       2       3       4

csv2:
Header5 Header6 Header7
5       6       7
5       6       7
5       6       7

所以我想将列Header2复制到列Header6上,结果如下

csv2:
Header5 Header2 Header7
5       2       7
5       2       7
5       2       7
        2

每个标头位于不同的单元格中。 我尝试了以下操作(甚至制作了第三个文件),但没有成功:

with open('book1.csv', 'r') as book1:
    with open('book2.csv', 'r') as book2:
        reader1 = csv.reader(book1, delimiter=',')
        reader2 = csv.reader(book2, delimiter=',')

        both = []
        fields = reader1.next() # read header row
        reader2.next() # read and ignore header row
        for row1, row2 in zip(reader1, reader2):
            row2.append(row1[-1])
            both.append(row2)

        with open('output.csv', 'w') as output:
            writer = csv.writer(output, delimiter=',')
            writer.writerow(fields) # write a header row
            writer.writerows(both)

有任何想法吗? :)

您要追加的列表会水平追加。 该行无法知道要添加到该行的下一个项目是否属于相邻列或上方的多个列。

解决此问题的方法是识别具有最多值的标题列的长度(所有列中的最大列长度)。

在所需的“ csv2”输出中,Header2在其列中具有最高数量的值(4个值),而其他Headers(3个值)则最多。

您要做的是确保所有其他标头的长度等于最大长度(4个值)。

您可以连续地向每列添加不相关的项,以便为下一列完美地隔开。 您可以垂直添加到底部短栏的示例项目可以是空字符串值(“”),不适用的字符串值(“ NA”)或不希望显示的类似0的数字作为任何数据集列中的整数。

尝试类似的东西:

        for row1, row2 in zip(reader1, reader2):
            newRow = str(row1[0])+","+str(row1[1])+","+str(row1[2])
            both.append(row2)

我也建议您不要复制其他代码并将其粘贴为解决方案。 我建议您尝试至少执行一部分代码并寻求帮助。 如果您也不要添加任何代码,则很好,但是,如果您不尝试输入的代码,可能会使人们感到困惑,并且他们无法为您提供帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM