如何根据 header 标题对 CSV 数据进行排序,从行到列

How can I sort my CSV data from going into from rows into columns based on the header titles

在使用 Python 和 CSV 模块一段时间后,我终于能够在转置原始输出后提取一些具有特定值的数据,我们计划在未来的报告中使用该代码。问题是,代码需要按列而不是行来读取报告。

本质上,数据是这样的:1/Location/Ratio/Delay/Grade,然后是3/Location/Ratio/Delay/Grade,以此类推,直到数据结束。

在他们每个人的下面,是与他们相关的具体数据。基本上,输出是在一个巨大的行池中读取的,我基本上想像这样读取数据:

1/Location/Ratio/Delay/Grade
(Data)

但对于所有数据。我基本上是在看一个代码片段,而不是一长排,它允许我根据每个点给出的数字按列分隔行。 (例如,1、3、8、22 等...)这会让我大吵大闹。无需转置,因为我已经做到了这一点。

提前谢谢大家!如果我必须 post 我的代码,我愿意这样做。

我希望它从这里开始......

...到这个

也许这会给你一些想法,下面的脚本接受一个输入 CSV 文件,并通过计算有多少列包含单词 Movement 来确定有多少水平块。

然后在每个 Movement 列拆分每组列并将输出写入新的 output.csv 文件。

from itertools import product

with open('input.csv', 'rb') as f_input, open('output.csv', 'wb') as f_output:
    csv_input = csv.reader(f_input)
    csv_output = csv.writer(f_output)

    rows = list(csv_input)  # Load all rows in
    block_count = len([x for x in rows[0] if x.find('Movement') != -1])
    row_count = len(rows)
    col_count = len(rows[0]) / block_count

    for block, row in product(range(block_count), range(row_count)):
        csv_output.writerow(rows[row][block * col_count : block * col_count + col_count])

所以输入文件如下:

1 Movement,c2,c3,c4,c5,c6,c7,2 Movement,c2,c3,c4,c5,c6,c7,3 Movement,c2,c3,c4,c5,c6,c7
1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7
1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7
1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7
1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7
1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7

将产生以下输出文件:

1 Movement,c2,c3,c4,c5,c6,c7
1,2,3,4,5,6,7
1,2,3,4,5,6,7
1,2,3,4,5,6,7
1,2,3,4,5,6,7
1,2,3,4,5,6,7
2 Movement,c2,c3,c4,c5,c6,c7
1,2,3,4,5,6,7
1,2,3,4,5,6,7
1,2,3,4,5,6,7
1,2,3,4,5,6,7
1,2,3,4,5,6,7
3 Movement,c2,c3,c4,c5,c6,c7
1,2,3,4,5,6,7
1,2,3,4,5,6,7
1,2,3,4,5,6,7
1,2,3,4,5,6,7
1,2,3,4,5,6,7

使用 Python 2.7.9

测试