我有一个.csv文件,我想删除某些我不需要的列。 例如,
ID,Name,Nickname,Income,Car, ..............
1,A,test,12k,Benz, ..............
2,B,test1,23k,Audi, ..............
3,C,test2,20k,BMW, ..............
但是,我不需要他们的昵称和汽车品牌等信息。 因此,我有另一个.csv文件列出我不需要的列信息。
Remove_list,
Nickname,
Car,
.
.
.
.
.
最后,我想获得一个新的.csv输出文件,如下所示。
ID,Name,Income, ......
1,A,12k, ......
2,B,23k, .......
3,C,20k, ........
有谁知道如何实现这一目标?我只知道如何通过行方向而不是列来处理它。
而且我发现有人用c#完成了这个,但我只在python上工作。 (参见c#示例,How do I delete certain column from .csv file)
非常感谢您的帮助,
答案 0 :(得分:0)
您可以使用del语句删除列表中的值。 假设您在" csv_table"中有csv数据。变量,以及"列中要删除的标题列表"变量,你可以做这样的事情:
columns_indexes = sorted([index for index,column in enumerate(csv_table[0])
if column in columns],reverse=True)
for line in csv_table:
for index in columns_indexes:
del line[index]
csv_table变量现在将反映您想要的列表。您可以使用csv模块轻松读取csv文件。
答案 1 :(得分:0)
假设csv文件orig.csv
:
ID,Name,Nickname,Income,Car
1,A,test,12k,Benz
2,B,test1,23k,Audi
3,C,test2,20k,BMW
和remove_list.csv
:
Nickname
Car
我们可以做这样的事情来过滤:
def remove_cols():
remove_list = []
with open('remove_list.csv') as f:
for line in f:
remove_list.append(line.strip())
colIndexesToKeep = []
with open('orig.csv') as origFile:
with open('filtered.csv', 'w') as filteredFile:
for line in origFile:
if not colIndexesToKeep:
for ix, name in enumerate(line.split(',')):
if name.strip() not in remove_list:
colIndexesToKeep.append(ix)
filteredLine = [val.strip() for ix, val in
enumerate(line.split(',')) if ix in colIndexesToKeep]
filteredFile.write(','.join(filteredLine))
filteredFile.write('\n')
,它给出了输出filtered.csv
:
ID,Name,Income
1,A,12k
2,B,23k
3,C,20k