我想从csv文件中删除包含所有零的列,例如列f, g, h, k, l。所讨论的csv文件是用脚本填充的,因此不可能对列进行硬编码。如果你能帮忙的话,我将非常感激。
File.csv
a,b,c,d,e,f,g,h,i,j,k,l
1,5,4,4,5,0,0,0,6,3,0,0
2,5,3,4,1,0,0,0,7,1,0,0
1,2,6,4,1,0,0,0,9,2,0,0
5,7,3,4,2,0,0,0,2,2,0,0
7,2,9,4,3,0,0,0,1,1,0,0
合成预期
File.csv
a,b,c,d,e,i,j
1,5,4,4,5,6,3
2,5,3,4,1,7,1
1,2,6,4,1,9,2
5,7,3,4,2,2,2
7,2,9,4,3,1,1
以下方法可用于csv
库:
- 读取 中的头文件
- 读取 中的行
- 将行列表转置为列列表(使用
zip
) - 使用set删除所有只包含
0
的列 - 写出新的标题
- 将转置的列列表写成行列表。 例如:
import csv
with open('file.csv', newline='') as f_input:
csv_input = csv.reader(f_input)
header = next(csv_input) # read header
columns = zip(*list(csv_input)) # read rows and transpose to columns
data = [(h, c) for h, c in zip(header, columns) if set(c) != set('0')]
with open('file2.csv', 'w', newline='') as f_output:
csv_output = csv.writer(f_output)
csv_output.writerow(h for h, c in data) # write the new header
csv_output.writerows(zip(*[c for h, c in data]))