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

时间:2015-08-27 20:09:50

标签: python csv formatting output row

我有两个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我不想要的列。

2 个答案:

答案 0 :(得分:0)

您需要替换raw中的行或创建一个包含切片行的新列表,这里使用枚举来修正代码的一部分,以跟踪要在raw中替换的行的索引。 / p>

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

另一个不改变原始的例子:

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

答案 1 :(得分:0)

你应该看看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)