Python排序CSV文件

时间:2015-08-22 10:54:14

标签: python excel csv pandas

嘿,我有一个包含很多行的CSV文件,但其中一行不断重复。是否可以只保留该行的名字并保留所有其他数据。我尝试过熊猫,但是熊猫要求总和等功能。我在CSV文件中的数据就像。

H1 h2 h3 h4
A 1 2 3 4
A 2 3 4 5
A 3 4 5 6
B 1 2 3 4
B 2 3 4 5
B 3 4 5 6
C 1 2 3 4
C 2 3 4 5
C 3 4 5 6

其中每一个都有一个标题。由h1-h4显示。 我的数据不是这样的,它包含真实的文本值。

我想重新排列数据,看起来像这样。

A 
   1 2 3 4
   2 3 4 5
   3 4 5 6
B
   1 2 3 4
   2 3 4 5
   3 4 5 6

C
   1 2 3 4
   2 3 4 5
   3 4 5 6

或者

 A 1 2 3 4
   2 3 4 5
   3 4 5 6

B  1 2 3 4
   2 3 4 5
   3 4 5 6

C  1 2 3 4
   2 3 4 5
   3 4 5 6

所以基本上我希望它按第一个头名称分组,即h1。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

以下内容应该有效,它假设您的源数据是以空格分隔的(如您所示),如果它使用逗号或制表符,则需要更改我使用过的分隔符。

import csv

with open("input.csv", "r") as f_input, open("output.csv", "wb") as f_output:
    csv_input = csv.reader(f_input, delimiter=" ")
    csv_output = csv.writer(f_output)
    headers = next(csv_input)

    cur_row = ""
    for cols in csv_input:
        if cur_row != cols[0]:
            cur_row = cols[0]
            csv_output.writerow([cur_row])
        csv_output.writerow(cols[1:])

为您提供输出CSV文件,如下所示:

A
1,2,3,4
2,3,4,5
3,4,5,6
B
1,2,3,4
2,3,4,5
3,4,5,6
C
1,2,3,4
2,3,4,5
3,4,5,6

使用Python 2.7进行测试

要为每个组添加标头,请更改第一个writerow行,如下所示:

csv_output.writerows([[cur_row], headers])

提供以下输出:

A
H1,h2,h3,h4
1,2,3,4
2,3,4,5
3,4,5,6
B
H1,h2,h3,h4
1,2,3,4
2,3,4,5
3,4,5,6
C
H1,h2,h3,h4
1,2,3,4
2,3,4,5
3,4,5,6