如何对csv表中的数据进行行到列转置?

2023-11-27

我是脚本新手。我有一张桌子(Table1.txt)并且我需要创建另一个表,其中 Table1 的行按列排列,反之亦然。我已经找到了 Perl 和 SQL 的这个问题的解决方案,但没有找到 Python 的解决方案。

我两天前刚刚开始学习Python,所以这是我所得到的:

import csv
import sys

with open(sys.argv[1], "rt") as inputfile:
   readinput = csv.reader(inputfile, delimiter='\t')
   with open("output.csv", 'wt') as outputfile:
      writer = csv.writer(outputfile, delimiter="\t")
      for row in readinput:
            values = [row[0], row[1], row[2], row[3]]
            writer.writerow([values])

这只是将列再现为列。我现在想做的是将最后一行写为writer.writecol([values])但似乎没有这样的命令,而且我还没有找到另一种将行写成列的方法。


@Ashwini 的答案是完美的。魔法发生在

zip(*lis)

让我解释一下为什么这样做: zip (在最简单的情况下)接受两个列表并“压缩”它们:zip([1,2,3], [4,5,6])会变成[(1,4), (2,5), (3,6)]。因此,如果您将外部列表视为矩阵,将内部元组视为行,则这就是转置(即,我们将行转换为列)。

Now, zip是任意数量的函数,因此它可以采用两个以上的参数:

# Our matrix is:
# 1 2 3
# 4 5 6
# 7 8 9

zip([1,2,3], [4,5,6], [7,8,9])

>>> [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

# Now it is
# 1 4 7
# 2 5 8
# 3 6 9

我们面临的问题是,在您的情况下,我们不知道要传递多少参数zip。但至少,我们已经知道了这些论点:它们是lis! lis是一个列表,该列表的每个元素也是一个列表(对应于输入文件中的一行数字)。这*只是 Python 告诉函数的方式“请使用以下任何内容作为你的论据,而不是事物本身!”

So

lis = [[1,2,3], [4,5,6]]
zip(*lis)

完全一样

zip([1,2,3], [4,5,6])

恭喜,现在您已成为 Python 专家! ;-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何对csv表中的数据进行行到列转置? 的相关文章

随机推荐