嘿,我有一个包含很多行的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。任何帮助将不胜感激。
答案 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