从 CSV 文件中删除不需要的列

Remove unwanted columns from CSV file

我有两个 CSV 文件列表,我的程序正在将它们合并到一个文件中。 第一组文件有 5 列数据,我不想包含在输出中。如何从使用 csv.reader?

读取的数据中逐行删除或一次性删除这 5 列

这是我的函数(我想保持函数 def 和结构基本相同):

def get_data(filename,rowlen,delimit=','):
    data = []
    with open(filename, 'rb') as f:
        raw = csv.reader(f, dialect='excel', delimiter=delimit)
        if raw != None:
            for row in raw:
                if row[-1] == '':
                    row.pop()
                for i in range(len(row),rowlen):
                    row.append('-999')
                data.append(row)
    return data

我试过这样做:

raw = csv.reader(f, dialect='excel', delimiter=delimit)
    if raw != None:
        for row in raw:
            if rowlen == 13:  # This is true only for csv files I want to shorten
                row = row[0:8]
                rowlen = 8
            if row[-1] == '':

但输出文件保持不变。另外,我尝试注释掉 rowlen = 8,但这只是用 -999.

填充了我不想要的列

您需要替换 raw 中的行或创建一个包含切片行的新列表,此处使用枚举更正部分代码以跟踪 raw 中要替换的行的索引.

for i, row in enumerate(raw):
   if rowlen == 13:  # This is true only for csv files I want to shorten
       raw[i] = row[0:8]
       rowlen = 8

另一个不改变 raw 的例子:

new_container = []
for row in raw:
   if rowlen == 13:  # This is true only for csv files I want to shorten
       new_container.append(row[0:8])  # we just append your slice to the new_container each iteration
       rowlen = 8

你应该看看 pandas。它使 csv 的工作变得更好..

from pandas import read_csv

def get_data(filename, rowlen, delimit=','):
    df = read_csv(filename, header=None, sep=delimit, usecols=range(rowlen))
    df.to_csv('output.csv', index=False)

get_data('input.csv',4)