【问题标题】:Remove unwanted columns from CSV file从 CSV 文件中删除不需要的列
【发布时间】:2015-08-27 20:09:49
【问题描述】:

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

【问题讨论】:

  • 你应该为你的块代码使用 SO 缩进,在每行代码前添加四个空格,你的代码将显示语法着色

标签: python csv formatting output row


【解决方案1】:

您需要替换原始行或创建一个包含切片行的新列表,这里使用枚举更正您的部分代码,以跟踪要替换为原始行的索引。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-17
      • 2013-10-02
      • 2016-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-03
      相关资源
      最近更新 更多