我怎样才能删除某些列然后将想要的列写入 csv python
How could I delete certain columns then write wanted columns into csv python
我有一个 .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)
非常感谢您的帮助,
您可以使用 del 语句删除列表中的值。
假设您在 "csv_table" 变量中有 csv 数据,并且在 "columns" 变量中有要删除的 headers 列表,您可以这样做:
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 文件。
假设 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
我有一个 .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)
非常感谢您的帮助,
您可以使用 del 语句删除列表中的值。 假设您在 "csv_table" 变量中有 csv 数据,并且在 "columns" 变量中有要删除的 headers 列表,您可以这样做:
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 文件。
假设 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